Ich habe List<Map<String, String>>
jedes Element in der Liste ist eine Karte, z
companyName - IBM
firstName - James
country - USA
...
Ich möchte einen Map<String, List<String>>
erstellen, in dem companyName einer Liste von firstName __ zugeordnet wird, z
IBM -> James, Mark
ATT -> Henry, Robert..
private Map<String,List<String>> groupByCompanyName(List<Map<String, String>> list) {
return list.stream().collect(Collectors.groupingBy(item->item.get("companyName")));
}
aber dies erstellt Map<String, List<Map<String, String>>
(Zuordnung von comanyName zu einer Liste von Karten)
wie erstelle ich einen Map<String, List<String>>
?
Ich habe es nicht getestet, aber so etwas sollte funktionieren:
Map<String, List<String>> namesByCompany
= list.stream()
.collect(Collectors.groupingBy(item->item.get("companyName"),
Collectors.mapping(item->item.get("firstName"), Collectors.toList())));
Sie können das Formular verwenden:
groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream)
d. h. die Werte aus der Karte in der Abwärtsrichtung angeben, um als Liste aufgenommen zu werden. Die Dokumentation hat dafür ein gutes Beispiel ( hier ).
downstream
ist so etwas wie - mapping(item->item.get(<name>), toList())
Die groupingBy-Methode liefert eine Karte, deren Werte Listen sind. Wenn Sie diese Listen auf irgendeine Weise bearbeiten möchten, geben Sie einen "Downstream-Collector" an In Ihrem Fall möchten Sie keine Liste als Wert verwenden. Daher müssen Sie einen Downstream-Collector angeben.
Um die Map zu bearbeiten, können Sie die statische Methodenzuordnung in der Collectors-Datei verwenden:
Collector<T, ?, R> mapping(Function<? super T, ? extends U> mapper,
Collector<? super U, A, R> downstream)
Im Wesentlichen wird ein Collector generiert, indem eine Funktion auf die nachgeordneten Ergebnisse angewendet wird, und die Funktion wird an einen anderen Collector übergeben.
Collectors.mapping(item->item.get("firstName"), Collectors.toList())
Dadurch wird ein Downstream-Collector zurückgegeben, der das erreicht, was Sie möchten.