2010-09-20 8 views
18

Ich kann es verwenden, um nach Emp-ID zu sortieren, aber ich bin nicht sicher, ob es möglich ist, Zeichenfolgen zu vergleichen. Ich bekomme eine Fehlermeldung, dass der Operator für Strings nicht definiert ist.Verwendung der Comparable CompareTo on Strings in 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

Neugierig, warum brauchen Sie 'I' auf 'Emp' zu werfen, wenn Sie es bereits erklärt habe zu sein' Emp' in der Methodensignatur? – BoltClock

Antwort

44

Was Sie verwenden müssen, ist die compareTo() Methode von Strings.

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

Das sollte tun, was Sie wollen.

Normalerweise bei der Implementierung der Comparable Schnittstelle, werden Sie nur die Ergebnisse der Verwendung anderer Comparable Mitglieder der Klasse aggregieren.

Hier ist eine ziemlich typische Implementierung eines compareTo() Methode:

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

keine Besetzung erforderlich. compareTo Argument ist generischer Typ – Gopi

+0

wenn ich "else ersetzen if ((this.getName())> ((Emp) i) .getName())" mit "else if (this.getName(). compareTo (((Emp) i) .getName()> 0) ", bekomme ich einen ähnlichen Fehler, der besagt, dass operator> für Typ String undefiniert ist. int – Jack

+0

auch ohne Casting – Jack

1

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

sein

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

+1

Wie von anderen angezeigt, ist 'getName(). compareTo (i.getName());' trotzdem eine bessere Option. – zengr

2

Sie tun nicht, sollten Sie nicht brauchen Wirf mich auf Emp, es ist schon ein Emp:

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

Java String bereits Vergleichbare implementiert. So können Sie einfach Ihre Methode schreiben, wie

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

(natürlich sicherstellen, dass Sie die richtigen Validierungen wie null Schecks usw. hinzufügen)

auch in Ihrem Code, versuchen Sie nicht Strings vergleichen mit ‚==‘. Verwenden Sie stattdessen die Methode 'equals'. '==' nur Stringreferenzen vergleichen, während equals semantisch zwei Strings vergleicht.

6

Ziemlich sicher, dass Ihr Code kann wie folgt geschrieben werden:

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

Oh, ich verstehe ... Ich muss verwirrt gewesen sein, als ich vom Vergleiche wechselte Ints und String und verwendet> Zeichen. Vielen Dank!! – Jack