Java - Eliminar objeto de lista mediante el atributo id

 
Vista:
sin imagen de perfil
Val: 72
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Eliminar objeto de lista mediante el atributo id

Publicado por smn (25 intervenciones) el 19/09/2020 23:14:15
Muy buenas, Como ven tengo una lista que contiene objetos de la clase radioreloj y este objeto tiene un atributo id, ok lo que estoy haciendo es recorrer la lista e imprimir y solicito por teclado que ingrese un numero para eliminar el objeto, se elimina el objeto y nuevamente se recorre la lista y se modifica el id del objeto.

lo que yo busco es poder eliminar el objeto con id 2 y eso lo hago ingresando 2 por teclado y lo remuevo asi
1
listaRadioReloj.remove(opcion-1)

entonces me quedaria el objeto con id 1 y 3 pero ahora ya no puedo usar lo mismo que hice antes entonces lo que necesito es ver como puedo eliminar un objeto mediante su id.

esto fue lo ultimo que intente pero la idea no es cambiar su id, la idea es que mantenga su id y poder eliminarlo mediante su id .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ArrayList<RadioReloj> listaRadioReloj = new ArrayList<>();
 
Reloj reloj = new Reloj(12,12,52);
 
RadioReloj radioreloj1 = new RadioReloj(1,"Azul",1.2,true,reloj);
RadioReloj radioreloj2 = new RadioReloj(2,"Verde",1.5,true,reloj);
RadioReloj radioreloj3 = new RadioReloj(3,"Rojo",2.2,true,reloj);
 
listaRadioReloj.add(radioreloj1);
listaRadioReloj.add(radioreloj2);
listaRadioReloj.add(radioreloj3);
 
for(RadioReloj radioRelojj: listaRadioReloj){
    System.out.println(radioRelojj);
}
// Eliminar RadioReloj opcion 1
///*
contador = 1;
while(true){
    System.out.println("Seleccione el ID del RadioReloj a eliminar");
    opcion = input.nextByte();
    listaRadioReloj.remove(opcion-1);
    for(int i=0; i<listaRadioReloj.size(); i++){
        listaRadioReloj.get(i).setID(contador);
        System.out.println(listaRadioReloj.get(i));
        contador++;
    }
    break;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 72
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Eliminar objeto de lista mediante el atributo id

Publicado por smn (25 intervenciones) el 20/09/2020 02:35:27
Duda resuelta :]

1
2
3
4
5
6
7
8
9
System.out.println("Seleccione el ID del RadioReloj a eliminar");
opcion = input.nextByte();
 
for(int i=0; i<listaRadioReloj.size(); i++) {
     if (listaRadioReloj.get(i).getID() == opcion) {
           listaRadioReloj.remove(i);
 
       }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Eliminar objeto de lista mediante el atributo id

Publicado por Rodrigo (623 intervenciones) el 20/09/2020 02:48:15
Si no existe mas de 1 elemento con el mismo id, podrias hacer un break como parte de ese if, para no seguir iterando innecesariamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 72
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Eliminar objeto de lista mediante el atributo id

Publicado por smn (25 intervenciones) el 20/09/2020 04:47:24
toda la razón se me había pasado ese detalle
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Eliminar objeto de lista mediante el atributo id

Publicado por Rodrigo (623 intervenciones) el 20/09/2020 05:04:21
Una version mas corta y que hace lo mismo que ese ciclo es hacerlo en 1 sola linea usando el metodo removeIf y un lambda para la condicion

1
listaRadioReloj.removeIf( r -> r.getID() == opcion );

No hay ciclo, no hay if y no hay break.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Eliminar objeto de lista mediante el atributo id

Publicado por Kabuto (1381 intervenciones) el 20/09/2020 17:50:08
Otra posibilidad, ni mejor ni peor, simplemente por aportar distintas opciones..., es sobrescribir en la clase Reloj, el método equals(), de forma que dos objetos Reloj se consideren equivalentes si tienen el mismo id.


Algo similar a esto.
1
2
3
4
5
6
7
8
9
@Override
public boolean equals(Object objeto) {
        if (objeto instanceof Reloj) {
                Reloj otroReloj = (Reloj) objeto;
                return this.id == otroReloj.id;
        }
        else
                return false;
}

De este modo, el ArrayList sabrá cuándo dos objetos son iguales/equivalentes

Así que basta con invocar su método remove y pasarle un nuevo objeto Reloj con el id que nos interese, y eliminará de la lista el objeto Reloj equivalente:

1
2
3
4
5
System.out.println("Seleccione el ID del RadioReloj a eliminar");
opcion = input.nextByte();
 
listaRadioReloj.remove( new Reloj(opcion));
}

Para que esto funcione, bien, la clase Reloj ha de tener un constructor que permita construir un reloj aportando solo el valor para el atributo id

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Reloj {
        int id;
        int hora = 0,minutos = 0,segundos = 0;
 
    public Reloj(int id) {
        this.id = id
    }
 
 
 
 
 
    @Override
    public boolean equals(Object objeto) {
            if (objeto instanceof Reloj) {
                    Reloj otroReloj = (Reloj) objeto;
                    return this.id == otroReloj.id;
            }
            else
                    return false;
    }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar