Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/07/2015, 06:18
Avatar de Tipdar
Tipdar
 
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Respuesta: Ordenar ArrayList

Ante todo te saludo, maiksix!

En efecto, tienes que redefinir el método compareTo(). En realidad es sólo una de las vías (muy cómoda por cierto), pero ya que andas por esa línea te diré cómo hacerlo.

Lo primero es que a tu clase EdgeSavings tiene que implementar la interfaz Comparable. Cómo es genérica te quedaría algo así:

Código PHP:
public class EdgeSavings implements Comparable<EdgeSavings> {
...

Nada complicado ¿eh? Tienes, fíjate bien, TIENES, no debes, tienes entonces que redefinir el método compareTo(Object). En tu caso, y teniendo presente que lo estamos haciendo genérico y que el atributo savings es de tipo double sería:

Código PHP:
public int compareTo(EdgeSavings edge)  {
    if (
this.savings edge.getSavings())
       return -
1;
    if (
this.savings edge.getSavings())
       return 
1;
    return 
0;

¿Qué acabo de hacer? Le estoy diciendo cómo debe ordenar tu ArrayList (tu Collection). Lo he puesto así, a lo pavote para que comprendas cómo funciona esto. Al compareTo le pasas un objeto de tu misma clase, y comparas tu objeto (nota los this) con el otro objeto (edge) que le pasas como parámetro. Te devuelve 1 si el objeto a comparar es mayor, -1 si es menor y 0 si son iguales. En ese método le dices cómo comparar. En este caso, porque solo quieres ordenar, tú mismo nunca vas a invocar directamente al método compareTo.

Ya lo otro es sencillo. Una vez lleno tu ArrayList con objetos EdgeSavings invocas esto:

Código PHP:
List<EdgeSavingsmiLista = new ArrayList<EdgeSavings>();

miLista.add(...); 

// todos los objetos

Collections.sort(miLista); 
El método sort de la clase Collections ordenará el ArrayList para ti, pero ya sabe cómo comparar, porque se lo has dicho en la redefinición del método compareTo.

Espero te sirva.
__________________
El último TipdaR

Última edición por Tipdar; 10/07/2015 a las 06:47