Ich versuche, in der Java 8-Stream-API einen einfachen Weg zu finden, um die Gruppierung durchzuführen. Ich komme mit diesem komplexen Weg heraus!
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, List<String>> collect = list.stream().collect(
Collectors.groupingBy(o -> o));
System.out.println(collect);
List<String[]> collect2 = collect
.entrySet()
.stream()
.map(e -> new String[] { e.getKey(),
String.valueOf(e.getValue().size()) })
.collect(Collectors.toList());
collect2.forEach(o -> System.out.println(o[0] + " >> " + o[1]));
Ich freue mich über Ihren Beitrag.
java
functional-programming
java-8
Muhammad Hewedy
quelle
quelle
Antworten:
Ich denke, Sie suchen nur nach der Überlastung, die eine andere benötigt,
Collector
um anzugeben, was mit jeder GruppeCollectors.counting()
zu tun ist ... und dann um zu zählen:Ergebnis:
(Es besteht auch die Möglichkeit, die
groupingByConcurrent
Effizienz zu steigern. Beachten Sie dies für Ihren echten Code, wenn er in Ihrem Kontext sicher wäre.)quelle
and then performing a reduction operation on the values associated with a given key using the specified downstream Collector
Map<String, Long> counted = list.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
, was genau an diesem Punkt passiert und welche Links mit weiteren Erklärungen zum Thema gesendet werden könntenquelle
Hier ist ein Beispiel für eine Liste von Objekten
quelle
Hier sind etwas andere Optionen, um die vorliegende Aufgabe zu erfüllen.
mit
toMap
:mit
Map::merge
:quelle
Hier ist die einfache Lösung von StreamEx
Reduzieren Sie den Boilerplate-Code:
collect(Collectors.
quelle
Wenn Sie eine Drittanbieter - Bibliothek mit Open sind, können Sie die Verwendung der
Collectors2
Klasse in Eclipse - Kollektionen auf die konvertierenList
zu einemBag
einer VerwendungStream
. ABag
ist eine Datenstruktur, die zum Zählen erstellt wurde .Ausgabe:
In diesem speziellen Fall können Sie einfach
collect
dieList
direkt in eineBag
.Sie können das auch
Bag
ohne Verwendung eines erstellen,Stream
indem Sie dasList
mit den Eclipse Collections-Protokollen anpassen .oder in diesem speziellen Fall:
Sie können die Tasche auch direkt erstellen.
A
Bag<String>
ist insofern wie aMap<String, Integer>
, als es intern die Schlüssel und ihre Anzahl verfolgt. Wenn Sie jedochMap
nach einem Schlüssel fragen , der nicht enthalten ist, wird er zurückgegebennull
. Wenn Sie aBag
nach einem Schlüssel fragen , der nicht using enthältoccurrencesOf
, wird 0 zurückgegeben.Hinweis: Ich bin ein Committer für Eclipse-Sammlungen.
quelle