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<EdgeSavings> miLista = 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.