Foros del Web » Programación para mayores de 30 ;) » Java »

Comparar elementos lista equals

Estas en el tema de Comparar elementos lista equals en el foro de Java en Foros del Web. Hola. Tengo una lista genérica de un tipo y quería saber como se comparan los elementos de la lista unos con otros. Yo he echo ...
  #1 (permalink)  
Antiguo 15/01/2008, 15:16
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Comparar elementos lista equals

Hola.

Tengo una lista genérica de un tipo y quería saber como se comparan los elementos de la lista unos con otros.

Yo he echo esto:
Código PHP:
    for(int i=0i<conti++){
            if(
contenido.get(i).equals(contenido.get(cont-1))){
                
System.out.printf("Repetido");
            } 
Seguro que es una tontada, pero si alguien sabe como se hace o puede recomendarme alguna web, se lo agradecería.

Saludos.
  #2 (permalink)  
Antiguo 15/01/2008, 16:22
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Comparar elementos lista equals

Si lo que quieres es comparar los objetos según un campo lo suyo es que la clase implemente la interface Comparable con el método:

Código:
    public int compareTo(Object ob)
Este método debe devolver un entero:
- negativo si el objeto actual es menor que el objeto2
- 0 si son iguales
- positivo si el objeto2 es mayor que el objeto actual

*Mayor, menor o igual según el criterio de búsqueda que queramos aplicar, claro está.

Para luego poder usarlo de la forma:

Código:
    
    Coche coche1 = new Coche();
    Coche coche2 = new Coche();

    if( coche1.compareTo(coche2) == 0) { System.out.println("Son iguales"); }
Si lo que quieres es comparar dos objetos en profundidad lo que tienes que hacer es reescribir el método de la clase Object:

Código:
 public boolean equals(Object ob)
En el cual debes hacer la comparación de todos los campos de los objetos ( o los que consideres oportunos) y devolver un booleano indicando si son o no son iguales.

Después podras usar este método de la forma:

Código:
    Coche coche1 = new Coche();
    Coche coche2 = new Coche();

    if (coche1.equals(coche2)) { System.out.println("Los objetos son iguales"); }
Espero que te sirva. Un saludo!
  #3 (permalink)  
Antiguo 16/01/2008, 06:27
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Comparar elementos lista equals

Gracias por la respuesta.

Basicamente me gustaría comparar unicamente 1 atributo del objeto, pongamos que se llama "color".

¿Cómo hago para comparar solamente ese atributo del objeto?
¿De qué manera redefino el método equals?

Gracias.
  #4 (permalink)  
Antiguo 16/01/2008, 08:27
Avatar de df_aguirre  
Fecha de Ingreso: agosto-2007
Ubicación: Colombia
Mensajes: 14
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Comparar elementos lista equals

Cita:
Iniciado por IMAC/ Ver Mensaje
Hola.

Tengo una lista genérica de un tipo y quería saber como se comparan los elementos de la lista unos con otros.

Yo he echo esto:
Código PHP:
    for(int i=0i<conti++){
            if(
contenido.get(i).equals(contenido.get(cont-1))){
                
System.out.printf("Repetido");
            } 
Seguro que es una tontada, pero si alguien sabe como se hace o puede recomendarme alguna web, se lo agradecería.

Saludos.

pq usas .get para obtener el dato??, si usas una lista comun simplemente el valor es contenido[i], si usas colecciones (arrayList) ya te toca con iteradores y si usas hashmap.. bueno es otro cuento..
  #5 (permalink)  
Antiguo 16/01/2008, 12:50
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Comparar elementos lista equals

Uso ArrayList.

Así:
List<Color> miLista = new ArrayList<Resultado>();
  #6 (permalink)  
Antiguo 16/01/2008, 14:21
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Comparar elementos lista equals

Ok, voy a reescribir mi pregunta para no liarnos:

Tengo una lista de ArrayList de un tipo, pongamos Color.

Código PHP:
List<ColormiLista = new ArrayList<Color>(); 
La cuestión es que en la lista meto un objeto de tipo Color que contiene 4 argumentos. Pongamos:
Código PHP:
private Caracteristica brillo//de tipo Caracteristica
private Especificaciones rgb//de tipo Especificaciones 
Yo ahora quiero comparar un atributo de tipo Caracteristica con el elemento de tipo Característica de mi lista de tipo Color.

No se como extraer un solo atributo del objeto que está contenido en la lista ArrayList.
He probado cosas, pero me imagino que están mal, porque no me dan resultado:

Código PHP:
for(int i=0i<miLista.size(); i++){
  if(
miLista.get(i).equals(brillo)){
    
System.out.printf("existe");
    return 
true;
  }else{
        return 
false;
  }


Espero que haya quedado más claro.
Gracias.
  #7 (permalink)  
Antiguo 17/01/2008, 03:08
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Comparar elementos lista equals

Es un suponer que tienes un metodo para acceder a la Caracteristica brillo (supongamos getBrillo() )

pues con if(((Color)miLista.get(i)).getBrillo().equals(bril lo)) y suponiendo que la clase Característica tenga bien implementado el equals, deberia funcionar.

S!
  #8 (permalink)  
Antiguo 17/01/2008, 14:51
Avatar de df_aguirre  
Fecha de Ingreso: agosto-2007
Ubicación: Colombia
Mensajes: 14
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Comparar elementos lista equals

Pq no usas un iterator para capturar los objetos de la lista y usas compareTo para comparar los objetos en vez de equals??

acabo de hacerlo asi y me funciono bien!
  #9 (permalink)  
Antiguo 18/01/2008, 01:23
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Comparar elementos lista equals

Lo del Iterator, o usar un foreach en versiones modernas, lo entiendo, pero ¿por que te pareceria mejor usar compareTo en vez de equals? Dado que solo ha de ver si son iguales, y no saber si uno es "mayor" que otro, no veo la ventaja.

De todas formas, lo más sencillo es implementar bien el equals y usar el metodo contains(o) que ya te proporciona List .

S!

PD: Y si el problema es tener elementos repetidos, tambien se puede usar un Set que los elimina automaticamente.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:31.