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

ordenar array de objetos(sin comparable)

Estas en el tema de ordenar array de objetos(sin comparable) en el foro de Java en Foros del Web. Hola, La duda que planteo es sencilla. Tengo un arraylist de objetos, por ejemplo Personas, y quiero una tenga dicho array con datos, ordenarlo por ...
  #1 (permalink)  
Antiguo 16/09/2011, 01:40
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 13 años, 10 meses
Puntos: 0
ordenar array de objetos(sin comparable)

Hola,

La duda que planteo es sencilla. Tengo un arraylist de objetos, por ejemplo Personas, y quiero una tenga dicho array con datos, ordenarlo por alguno de sus atributos que en mi caso sera un entero, por ejemplo la edad. Quiero que me los ordene de mayor a menos y en caso de ser de la misma edad me da igual, se pone antes uno cualquiera....

Pero me gustaría no utilizar el comparable...es decir, no implementar el compareTo en mi clase persona, sino que en una clase cualquiera, cuando tengo dicha lista, llamar aun método privado de mi clase que me los ordene...

Alguien me puede dar alguna idea?
gracias!
  #2 (permalink)  
Antiguo 16/09/2011, 02:35
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: ordenar array de objetos(sin comparable)

Hola:

Java tienes una clase Arrays que tiene un método sort(). Admite un array (supongo que tu array de Personas) y un Comparator, que es el que indica si persona1 es mayor que persona2 de acuerdo al criterio que tú programes. Es como el Comparable, pero no necesitas implementar en persona el método de comparación, sino que lo haces en una clase separada Comparator.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 16/09/2011, 02:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: ordenar array de objetos(sin comparable)

Collection.sort() + Comparator

http://download.oracle.com/javase/1....il.Comparator)

http://download.oracle.com/javase/1....omparator.html

Edit: Ya había contestado Chuidiang :D
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 16/09/2011, 03:06
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ordenar array de objetos(sin comparable)

Gracias a los dos pero hay algo que no me queda claro.

Ya he visto que tanto Arrays.sort() como Collections.sort() me vale porque puedo pasarle una lista y un comparator...pero no entiendo como hago el comparator.

Cuando pongo el .sort me pone:

Collections.sort(List<Object> list, Comparator<? super Object> comparator)

Pero no se que tengo que pasarle en el comparator. Bueno, se que tengo que pasarle el parametro que indicara cual es mayor, en mi caso un Integer, la edad.
Pero como se lo paso ahi? Tengo que crearme una clase nueva que se llame Comparator?

Chuidiang me has dicho que:
Cita:
sino que lo haces en una clase separada Comparator.
Entonces tengo crearme una clase nueva? Y no puedo en la misma clase que estoy crearme ahi un metodo o algo?

Si implemento el public int compare(Object o1, Object o2) que me has dicho xerelo que lo tengo que hacer en la clase en la que estoy y donde tengo la lista? Y como le paso eso al Collections.sort(...)??

Disculpar la ignorancia.

Muchas gracias de nuevo
  #5 (permalink)  
Antiguo 16/09/2011, 04:00
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ordenar array de objetos(sin comparable)

Al final he decidido no ordenarlos y me los traeré ordenados de la base de datos.
Me quedare con la duda de como se hacía pero bueno...

Muchísimas gracias a los dos por vuestra ayuda.
  #6 (permalink)  
Antiguo 16/09/2011, 04:58
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: ordenar array de objetos(sin comparable)

Si, debes crear una clase aparte que implemente el comparador.

Un ejemplo sería:
Código Javascript:
Ver original
  1. class AgeCompare implements Comparator<Persona> {
  2.   public int compare(Persona uno, Persona dos) {
  3.     return uno.getEdad().compareTo(dos.getEdad());
  4.   }
  5. }
  #7 (permalink)  
Antiguo 16/09/2011, 06:10
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: ordenar array de objetos(sin comparable)

E incluso la clase que tienes ahora, basta con ponerle implements Comparator<Persona> e implementar el método en la misma clase. Luego llama a Collection.sort(tulista, this).

Y no sé si quieres o no ordenar de otras formas o más campos, pero si sólo vas a ordenar por ese campo, en la misma consulta a bd puedes decir que los quieres ordenados por edad y no tendrías que hacer nada.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: Ninguno
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 01:36.