2010-09-20 11 views
18

Puedo usarlo para ordenar por identificación de usuario pero no estoy seguro de si es posible comparar cadenas. Me sale un error de que el operador no está definido para las cadenas.Cómo usar CompareTo similar en cadenas en Java

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; 
+8

curioso, ¿por qué necesita para echar 'I' 'a Emp' cuando ya has declarado que es' Emp' en el firma de método? – BoltClock

Respuesta

44

Lo que hay que utilizar es el método compareTo() de cadenas.

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

Eso debería hacer lo que quiera.

Normalmente al implementar la interfaz Comparable, solo agregará los resultados del uso de otros miembros Comparable de la clase.

A continuación se muestra una implementación bastante típico de un método 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; 
    } 
} 
+0

sin molde necesario. compareTo argumento es tipo genérico – Gopi

+0

cuando reemplazo "else if ((this.getName())> ((Emp) i) .getName())" con "else if (this.getName(). compareTo (((Emp) i) .getName()> 0) ", recibo un error similar al decir operador> no está definido para tipo String, int – Jack

+0

incluso sin fundir – Jack

1

no

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

Debe ser

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

+1

Como lo indicaron otros, 'getName(). compareTo (i.getName());' es una opción mejor de todos modos. – zengr

2

Usted no necesita Echarlo a Emp, que ya es una emp:

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

Java String ya implementa Comparable. Por lo que podría simplemente escribir su método

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

(por supuesto, asegúrese de añadir validaciones apropiadas tales como cheques nulos, etc)

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

6

Bastante seguro de que su código sólo se puede escribir así:

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

Oh veo. Debo haber estado confundido al cambiar de comparar ints y string y used> sign. ¡¡Gracias!! – Jack