Java 8 stream aggregate-eine Karte

Ich versuche, etwas zu tun, was scheinbar unkompliziert, aber ohne Glück so weit. Ich habe eine Liste von Karte, Sie kommen aus einer Reihe von CompletableFutures parallel, das Ergebnis hat dann zusammengefügt werden. Da der key in der map ist einzigartig, Im Zusammenführen müssen die Werte und erzeugt eine neue Karte von eindeutigen Schlüsseln im Zusammenhang mit der kombinierten Liste von SomeType. Zum Beispiel:

Karte 1:
key1 : Sometype1
key2 : Sometype2

Map2
key1 : Sometype3
key2 : Sometype4

Gewünschte Ergebnis:
Karte 3:
key1 : Sometype, Sometype3
key2 : Sometype2, Sometype4

Versuchte ich mit groupBy-und andere Methoden, aber es scheint, die meisten von Ihnen annehmen, Sie arbeiten mit einer Liste und nicht eine Karte, mit zu beginnen, so war ich nicht in der Lage zu finden, eine einfache Möglichkeit, es zu tun.

Bisher habe ich so etwas wie:

 Map<String, List<Sometype>> volPercent = waitGroup.stream()
            .map(CompletableFuture::join)
            .flatMap((e) -> e.entrySet().stream())
            .collect(Collectors.groupingBy());

Den Teil, den ich bin mir nicht sicher, was gehen muss, in der Gruppierung Teil. Ich habe versucht, Anzeigen.Eintrag::getKey, es aber nicht kompilieren:

Error:(69, 25) java: incompatible types: inference variable T has incompatible bounds
equality constraints: com.Sometype
lower bounds: java.util.Map.Entry<java.lang.String,com.Sometype>
  • Bitte konstruieren Sie eine kleine runnable Beispiel für dein problem, es ist schwer zu lösen, nur mit dem stream Zeile code.
  • Die upstream - CompletableFuture Zeug ist ein bisschen eine Ablenkung. Es wäre gut für die Fragen der Zukunft zu beginnen, mit etwas mehr explizite Eingaben. Aber ich glaube, ich war in der Lage, um es herauszufinden.
InformationsquelleAutor Feras | 2015-02-19
Schreibe einen Kommentar