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

Ordenar Listas - Comparable - Comparator

Estas en el tema de Ordenar Listas - Comparable - Comparator en el foro de Java en Foros del Web. Hola, Tengo que ordenar una lista (llamemosla list) de objetos (lo típico, persona=nombre,edad), utilizando Comparator puedo ordenar mi "list" por nombre o por edad sin ...
  #1 (permalink)  
Antiguo 28/09/2009, 09:42
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 2 meses
Puntos: 0
Ordenar Listas - Comparable - Comparator

Hola,
Tengo que ordenar una lista (llamemosla list) de objetos (lo típico, persona=nombre,edad), utilizando Comparator puedo ordenar mi "list" por nombre o por edad sin problemas. Ahora bien, si quisiera ordenar primero por nombre y a igual nombre ordenar por edad ¿cómo debería hacerlo?

Tengo en el bean lo siguiente:

Código:
public static final Comparator comparaNombre = new Comparator() {

        public int compare(Object arg0, Object arg1) {
           Persona persona1 = (Persona ) arg0;
           Persona persona2= (Persona ) arg1;
        
           return persona2.getNombre().compareTo(persona1.getNombre());
        }
    };
Y luego en un action utilizo sort, e invoco el método
Código:
Collections.sort(list, persona.comparaNombre);
Muchas gracias para quien me pueda orientar.
  #2 (permalink)  
Antiguo 02/10/2009, 17:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 33
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Ordenar Listas - Comparable - Comparator

Buenas compañero, se lo que pide, pero el codigo no lo entiendo bien.
Para comparar una lista es asi:
public class miComparador implements Comparator{
public int compare(Object 01, Object02){
if(((tipoObjeto1)o1.nombre>((tipoObjeto2)o2.nombre {
return 1;
}
if(((tipoObjeto1)o1.nombre<((tipoObjeto2)o2.nombre {
return -1;
}
else{
if(((tipoObjeto1)o1.edad>=((tipoObjeto2)o2.edad{
return 1;
}
else{
return -1;
}
}
}
}

y ahora en el main pones:

miComparador c = new miComparador();
Collections.sort(lista,c);

La duda que tengo es que cuando es tipo String no me acerdo si se ponia lo d e<, > y eso, o se usaba otra forma. Espero haberte ayudado en algo.

Un saludo.
  #3 (permalink)  
Antiguo 02/10/2009, 21:37
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Ordenar Listas - Comparable - Comparator

Hola,

Los operadores <> no están definidos para la clase String.

En este caso la clase Persona debe implementar la interface 'Comparable<Persona>'. Y en el método de comparación se podría comparar 2 Strings; por reusabilidad.

Código Java:
Ver original
  1. public class Persona implements Comparable<Persona> {
  2. @Override
  3. public int compareTo(Persona o) {
  4.   String a = new String(this.nombre + String.valueOf(this.edad));
  5.   String b = new String(o.nombre + String.valueOf(o.edad));
  6.   return a.compareTo(b);
  7. }
  8. ...
O simplemente comparar 2 Strings.

Código Java:
Ver original
  1. String a = new String(arg0.nombre + String.valueOf(arg0.edad));
  2. String b = new String(arg1.nombre + String.valueOf(arg1.edad));
  3. return a.compareTo(b);
Saludos,
  #4 (permalink)  
Antiguo 05/10/2009, 05:22
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Ordenar Listas - Comparable - Comparator

Hola!, intentaré adaptar vuestra ayuda a lo que necesito (con mis clases) y ya les contaré.
Muchisimas Gracias por la dedicación y respuesta.
  #5 (permalink)  
Antiguo 05/10/2009, 05:25
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Ordenar Listas - Comparable - Comparator

Si bien el código que introduje puede que no se explique bien, la idea era poner algo ejemplificativo como para que ayude a entender lo que expresé con palabras. Espero no haber confundido la idea con ello.
Gracias

Un saludo
  #6 (permalink)  
Antiguo 06/10/2009, 09:00
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Ordenar Listas - Comparable - Comparator

Muchas gracias lo he probado (adaptandolo a lo que tengo) y me funcionó perfectamente.
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 17:24.