Sammlungen Sortieren, benutzerdefinierte Komparator funktioniert nicht
Habe ich einen benutzerdefinierten Comparator zum Sortieren einer ArrayList von Strings. Ich habe es durch den debugger und sah, wie Sie vergleichen und Rückgabe-Werte korrekt. Aber mein array nicht sortiert ist. Da ich bin neu in Java & Android, es könnte etwas anderes passiert sein.
Nach einem Blick auf es für ein paar Stunden, ich kann nicht herausfinden, was .. und seit ich mit dieser Seite zu beantworten so viele Fragen, ich wusste, wo zu kommen !
Collections.sort(allWords, new Comparator<String>(){
public int compare(String o1, String o2) {
scoreWord sc1 = new scoreWord((String)o1);
scoreWord sc2 = new scoreWord((String)o2);
int i1 = sc1.getScore();
int i2 = sc2.getScore();
if ( i1 > i2 )
return 1;
return 0;
}
public boolean equals(String o1, String o2) {
scoreWord sc1 = new scoreWord((String)o1);
scoreWord sc2 = new scoreWord((String)o2);
int i1 = sc1.getScore();
int i2 = sc2.getScore();
if ( i1 == i2 )
return true;
return false;
}
});
Aus welchem Grund brauchen Sie die
versuchen
equals(String o1, String o2)
Methode?versuchen
compare(Object o1, Object o2)
und equals(Object o1, Object o2)
InformationsquelleAutor Richard | 2011-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
compare
Methode ist nicht symmetrisch - es immer entweder gibt 1 oder 0.Statt, nur delegieren zu
Integer.compare
(wenn es verfügbar ist in der Java-version Sie verwenden), die in den Partituren:Ansonsten Mach es per hand, und das ist ehrlich gesagt eine Qual - wenn Sie dies benötigen, in mehr als einem Ort, schlage ich vor, Sie schreiben Ihre eigene Implementierung der
Integer.compare
zu vermeiden, die Wiederholung:Diese Weise müssen Sie entsprechende Symmetrie:
a.compareTo(b) < 0
impliziertb.compareTo(a) > 0
a.compareTo(b) > 0
impliziertb.compareTo(a) < 0
a.compareTo(b) == 0
impliziertb.compareTo(a) == 0
Es ist in der Dokumentation zum
Comparator.compare
(Es ist ausgedrückt in Zeichen, aber das ist die gleiche Sache.)InformationsquelleAutor Jon Skeet
Versuchen Sie dies:
pls mir einen Tipp geben, was meinen Sie mit "T/F"?
T/F - True/False
InformationsquelleAutor home
Ihre Komparator zurückkehren sollte, so etwas wie:
Zurück:
eine negative ganze Zahl, null oder eine positive ganze Zahl als das erste argument kleiner, gleich oder größer als das zweite.
Quelle
InformationsquelleAutor Austin Hanson