Primero en Python:
class Dato:
def __init__(self,nombre='',valor=0):
self.nombre = nombre
self.valor = valor
def __repr__(self):
return '(%s%d)' % (self.nombre,self.valor)
"""
Funcion ordenadora.
Ojo no pertenece a la clase """
def comparador_valor(dato1,dato2):
""" cmp es una funcion preconstruida de python """
return cmp(dato1.valor,dato2.valor)
"""
Codigo principal o ejecutable
"""
if __name__ == '__main__':
datos = [Dato('two',2),Dato('Ten',10),Dato('Four',4),Dato('Three',3)]
print 'Lista original: ',datos
datos.sort(cmp=comparador_valor)
print 'Lista ordenada: ',datos
Y ahora en Java:
import java.util.ArrayList;
import java.util.Collections;
public class Comparadores {
public static void main(String[] args) {
ArrayList<Dato> datos = new ArrayList<Dato>();
datos.add(new Dato("four",4));
datos.add(new Dato("two",2));
datos.add(new Dato("ten",10));
datos.add(new Dato("one",1));
datos.add(new Dato("three",3));
System.out.println("Datos originales: " + datos);
Collections.sort(datos,new ComparadorValor());
System.out.println("Datos ordenados: " + datos);
}
}
class Dato {
private String nombre;
private Integer valor;
public Dato(String nombre, Integer valor) {
this.nombre = nombre;
this.valor = valor;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Integer getValor() {
return valor;
}
public void setValor(Integer valor) {
this.valor = valor;
}
public String toString() {
return "(" + this.nombre + "<=>" + this.valor + ")";
}
}
class ComparadorValor implements java.util.Comparator<Dato>{
public int compare(Dato d1, Dato d2) {
return d1.getValor().compareTo(d2.getValor());
}
}
La salida:
Lista original: [(two<=>2), (Ten<=>10), (Four<=>4), (Three<=>3)]
Lista ordenada: [(two<=>2), (Three<=>3), (Four<=>4), (Ten<=>10)]