Java - Gibt es Stream Collectors, die ImmutableMap zurückgeben? [Duplikat]

8

Ich finde eine Variante von Collectors.toMap , die ein ImmutableMap zurückgibt, so dass ich folgendes tun kann:

%Vor%

(wobei tuple in diesem speziellen Beispiel eine Scala Tuple2 ist)

Ich habe gerade erfahren , dass eine solche Methode mit Java ausgeliefert wird. 8 Unterstützung in Guava 21 (yay!), Aber das klingt gut 6 Monate weg. Kennt jemand vorhandene Bibliotheken (etc), die dies heute implementieren könnten?

ImmutableMap ist nicht unbedingt erforderlich, scheint aber die beste Wahl zu sein, wie ich es benötige: Suche nach Schlüssel und Beibehaltung der ursprünglichen Iterationsreihenfolge. Unveränderlichkeit wird auch immer bevorzugt.

Beachten Sie, dass FluentIterable.toMap(Function) nicht ausreicht, da ich sowohl eine Key-Mapping-Funktion als auch eine Value-Mapping-Funktion benötige.

    
Luke Usherwood 29.12.2015, 06:49
quelle

2 Antworten

13

Sie müssen keine anonyme Klasse für diesen Kollektor schreiben. Sie können stattdessen Collector.of verwenden:

%Vor%

Oder wenn es Ihnen nichts ausmacht, die Ergebnisse zuerst in einer veränderlichen Map zu sammeln und dann die Daten in eine unveränderbare Map zu kopieren, können Sie den integrierten toMap collector kombiniert mit collectingAndThen :

verwenden %Vor%     
Alexis C. 29.12.2015, 07:53
quelle
0

Da ich noch keine solche Sammlung von Sammlern gefunden habe, teile ich meine erste Lücke mit der spezifischen, die ich gebraucht habe. Keine Glocken oder Pfeifen hier! (Wie zum Beispiel doppelte Schlüssel behandeln oder zusammenführen.)

Bitte zögern Sie nicht, Verbesserungen vorzuschlagen.

%Vor%     
Luke Usherwood 29.12.2015 06:49
quelle

Tags und Links