Mas de una forma de comparar objetos

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)]

Un comentario en “Mas de una forma de comparar objetos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s