Collections.sort () lässt meine Liste unsortiert

7

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() .

%Vor%

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?

    
Sahand 11.02.2018, 14:00
quelle

2 Antworten

11

Ihr Aufruf von sort übergibt einen anderen Vergleicher:

%Vor%

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.

    
dasblinkenlight 11.02.2018, 14:04
quelle
7

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 :

zu übergeben %Vor%     
Eran 11.02.2018 14:05
quelle

Tags und Links