Java Stream相当于LINQ SelectMany()

时间:2016-03-14 15:49:15

标签: java linq functional-programming java-8 java-stream

LINQ Java 8 StreamSelectMany等价物是什么?

例如,在C#中,如果我有Dictionary<string, List<Tag>> tags我要转换为IEnumerable<Tag>(字典中所有标记的可枚举),我会tags.SelectMany(kvp => kvp.Value)

是否有Map<String, List<Tag>>的Java等效项会产生Stream<Tag>

1 个答案:

答案 0 :(得分:13)

您正在寻找flatMap地图中包含的所有值:

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

此代码首先使用values()检索地图的所有值为Collection<List<Tag>>,然后使用stream()从此集合中创建一个Stream,然后展平每个List<Tag>的平面地图使用方法引用Stream进入List::stream