tutorial example java comparable compareto

example - Cómo utilizar el Comparable Comparable en cadenas en Java



spring security oauth2 (5)

Bastante seguro de que su código puede escribirse así:

public int compareTo(Emp other) { return this.getName().compareTo(other.getName()); }

Puedo usarlo para ordenar por emp id, pero no estoy seguro si es posible comparar cadenas. Recibo un error, el operador no está definido para las cadenas.

public int compareTo(Emp i) { if (this.getName() == ((Emp ) i).getName()) return 0; else if ((this.getName()) > ((Emp ) i).getName()) return 1; else return -1;


Java String ya implementa Comparable. Así que simplemente podrías escribir tu método como

public int compareTo(Emp emp) { return this.getName().compareTo(emp.getName()); }

(Por supuesto, asegúrese de agregar las validaciones adecuadas, como las comprobaciones nulas, etc.)

También en su código, no intente comparar cadenas utilizando ''==''. Utilice el método ''iguales'' en su lugar. ''=='' solo compara las referencias de cadena mientras que equals semánticamente compara dos cadenas.


Lo que necesitas usar es el compareTo() de Strings.

return this.getName().compareTo(i.getName());

Eso debería hacer lo que quieras.

Por lo general, al implementar la interfaz de Comparable , simplemente agregará los resultados del uso de otros miembros de la clase de Comparable .

A continuación se muestra una implementación bastante típica de un compareTo() :

class Car implements Comparable<Car> { int year; String make, model; public int compareTo(Car other) { if (!this.make.equalsIgnoreCase(other.make)) return this.make.compareTo(other.make); if (!this.model.equalsIgnoreCase(other.model)) return this.model.compareTo(other.model); return this.year - other.year; } }


No debería

if (this.getName() == ((Emp ) i).getName())

ser

if (this.getName().equals(i.getName()))


No necesitas lanzar i para Emp, ya es un Emp:

public int compareTo(Emp i) { return getName().compareTo(i.getName()); }