2016-03-14 18 views
7

Was ist das Java 8 Stream Äquivalent von LINQ SelectMany?Java Stream-Äquivalent von LINQ SelectMany()

Zum Beispiel in C#, wenn ich Dictionary<string, List<Tag>> tags, dass ich in eine IEnumerable<Tag> (eine flache enumerable aller Tags im Wörterbuch) drehen wollen, würde ich tags.SelectMany(kvp => kvp.Value) tun.

Gibt es ein Java-Äquivalent für eine Map<String, List<Tag>>, die eine Stream<Tag> ergeben würde?

Antwort

9

Sie suchen nach flatMap alle in der Karte enthaltenen Werte:

Map<String, List<Tag>> map = new HashMap<>(); 
Stream<Tag> stream = map.values().stream().flatMap(List::stream); 

Dieser Code ruft zuerst alle Werte von der Karte als Collection<List<Tag>> mit values(), einen Strom aus dieser Sammlung schafft mit stream() und dann flache Karten jeweils List<Tag> in eine Stream mit der Methodenreferenz List::stream.

+0

Also hat flatMap() nichts mit java.util.Map zu tun? Gut zu wissen, ich denke ... –

+1

@RobertFraser Sie sind nicht zu verwechseln –

+2

@RobertFraser Der Name kommt von der [Kartenfunktion] (https://en.wikipedia.org/wiki/Map_%28higher-order_function% 29), die eine Funktion über eine Liste von Werten "abbildet". – phg

Verwandte Themen