Ich versuche ein ArrayList
von PostingsEntry
-Objekten nach dem score
-Attribut der PostingsEntry
-Objekte zu sortieren. Die Liste befindet sich in einem PostingsList
-Objekt mit der Methode sort()
.
Ich versuche die Liste hier zu sortieren:
%Vor%Und ich drucke die Ergebnisse:
%Vor%Aber ich verstehe:
%Vor%Was zeigt, dass die Liste eindeutig nicht sortiert wurde. Wo gehe ich falsch?
Ihr Aufruf von sort
übergibt einen anderen Vergleicher:
Zu diesem Zweck ersetzt diese PostingsEntryComparator
die "natürliche Ordnung" durch score
, wie durch die PostingsEntry
Implementierung von Comparable<PostingsEntry>
festgelegt. Daher werden die Einträge auf ihrer docID
verglichen. Wenn Sie docID
anstelle von score
drucken, werden Sie feststellen, dass Ihre Liste ordnungsgemäß nach IDs geordnet ist.
Hinweis: Das Subtrahieren von IDs von zwei verglichenen Elementen kann aufgrund eines Integer-Überlaufs zu falschen Ergebnissen führen. Verwenden Sie stattdessen Integer.compare
, auf dieselbe Weise, wie Sie Double.compare
in PostingsEntry.compareTo
korrekt verwendet haben.
Wenn Sie
anrufen %Vor% Sie sortieren nach PostingsEntryComparator
, was docID
s vergleicht.
Wenn Sie nach Score sortieren möchten, müssen Sie die Comparable
Implementierung Ihres PostingsEntry
verwenden, was Sie tun können, indem Sie Collections.sort()
aufrufen, ohne ein Comparator
:
Tags und Links java