Java 8 verwaltet die Reihenfolge nicht während der Gruppierung

9

Ich verwende Java 8 zum Gruppieren nach Daten. Aber die Ergebnisse sind nicht in Ordnung.

%Vor%

Hier verwende ich meine Klasse groupingKey, mit der ich dynamisch von ux gehe. Wie kann diese groupByColumns in sortierter Form erhalten werden?

    
shreya 27.02.2015, 11:33
quelle

2 Antworten

27

Das Nichtbestehen der Bestellung ist eine Eigenschaft von Map , die das Ergebnis speichert. Wenn Sie ein bestimmtes Verhalten Map benötigen, müssen Sie fordert eine bestimmte Map -Implementierung an . Z.B. LinkedHashMap behält den Anzeigenauftrag bei:

%Vor%

Übrigens gibt es keinen Grund, den Inhalt von mapList vor dem Erstellen von Stream in ein Array zu kopieren. Sie können einfach mapList.stream() aufrufen, um eine passende Stream zu erhalten.

Außerdem ist Collectors.mapping((Map<String, Object> p) -> p, toList()) veraltet. p->p ist eine Identitätszuordnung, daher gibt es keinen Grund, mapping überhaupt anzufordern:

%Vor%

Aber auch das GroupingKey ist veraltet. Es enthält im Grunde eine List der Werte, so dass Sie einfach einen List als Schlüssel an erster Stelle verwenden könnten. List s implementieren hashCode und equals entsprechend (aber Sie dürfen diese Schlüssel List s nachher nicht ändern ).

%Vor%     
Holger 27.02.2015, 12:25
quelle
0

Basiert auf @ Holgers großer Antwort. Ich poste dies, um denen zu helfen, die die Reihenfolge nach der Gruppierung beibehalten möchten, sowie das Mapping ändern.

Lassen Sie uns vereinfachen und annehmen, wir haben eine Liste von Personen (int age, String name, String adressen ... etc) und wir wollen die Namen nach Alter gruppiert werden, wobei die Reihenfolge eingehalten wird:

%Vor%     
Mitchapp 14.03.2018 16:42
quelle