2017-01-12 1 views
1

Ich bin in einer bizarren Situation. Gibt es trotzdem eine Liste mit einer Karte mit identischen Werten?Java 8 Stream Liste in Karte mit identischen Werten

heißt

let a vom Typ sein Map< Integer, List<String> >

sagen wir b nur eine Liste von ganzen Zahlen, die den Tasten der a entsprechen.

b.stream().map(x -> 
    a.get(x).stream() 
     .collect(
      Collectors.toMap(i -> i, x); 
     ) 
); 

Ich möchte eine Karte, wo alle Werte sind ein x und alle Tasten sind von den Werten in b.

Die obige Funktion wird angenommen, zurückzukehren, um ein Stream< List< Map< String, Int > > > (natürlich ist es nicht funktioniert)

+0

können Sie Probe Eingangs- und Ausgangsdaten zeigen? – shmosel

+1

Ihr gesendeter Code sollte einen Strom von Karten erzeugen, die alle Schlüssel auf einen einzelnen Wert abbilden. Ich bin mir nicht sicher, warum Sie das wollen oder wo die Liste in das Ergebnis kommt. – shmosel

+2

Der zweite Wert in 'toMap' muss auch ein Lambda sein' Collectors.toMap (i -> i, i -> x) ' – flakes

Antwort

2

Der zweite Wert in dem toMap Verfahren benötigt eine Lambda sein als auch (dh er die Schnittstelle Function<? super T, ? extends U> erfüllen muss, wo T ist der Typ für Objekte im b Strom und U ist der Typ für Werte in der resultierenden Karte):

Map<Integer, List<String>> a = ... 
List<Integer> b = ... 
Stream<Map<String, Integer>> c = b.stream().map(x -> 
     a.get(x).stream() 
       .collect(Collectors.toMap(i -> i, i -> x)));