Das Nichtbestehen der Bestellung ist eine Eigenschaft der Map
, die das Ergebnis speichert. Wenn Sie ein bestimmtes Map
Verhalten benötigen, müssen Sie request a particular Map
implementation. Z.B. LinkedHashMap
hält die Einsetzfolge:
groupedResult = people.collect(Collectors.groupingBy(
p -> new GroupingKey(p, groupByColumns),
LinkedHashMap::new,
Collectors.mapping((Map<String, Object> p) -> p, toList())));
Im Übrigen gibt es keinen Grund, den Inhalt mapList
in ein Array zu kopieren, bevor die Stream
erzeugen. Sie können einfach mapList.stream()
anrufen, um eine entsprechende Stream
zu erhalten.
Weiter ist Collectors.mapping((Map<String, Object> p) -> p, toList())
veraltet. p->p
ist eine Identitätszuordnung, also gibt es keinen Grund, mapping
überhaupt zu beantragen:
groupedResult = mapList.stream().collect(Collectors.groupingBy(
p -> new GroupingKey(p, groupByColumns), LinkedHashMap::new, toList()));
Aber auch die GroupingKey
veraltet ist. Es enthält im Grunde eine List
von Werten, so dass Sie nur einen List
als Schlüssel an erster Stelle verwenden können. List
s implementieren hashCode
und equals
entsprechend (aber Sie müssen nicht ändern Sie diese Schlüssel List
s danach).
Map<List<Object>, List<Object>> groupedResult=
mapList.stream().collect(Collectors.groupingBy(
p -> groupByColumns.stream().map(p::get).collect(toList()),
LinkedHashMap::new, toList()));
Danke Holger du hast meine Aufgabe einfacher gemacht. Aber ich habe immer noch das Problem, wenn ich nur in dieser gruppierten Spalten Sortierung anwenden möchte dann was soll ich tun? – shreya