Java Stream相当于LINQ SelectMany()

Rob*_*ser 9 java linq functional-programming java-8 java-stream

什么是Java 8 Stream相当于LINQ的SelectMany

例如,在C#中,如果我有Dictionary<string, List<Tag>> tags,我想变成一个IEnumerable<Tag>(字典中所有标签的可枚举),我会这样做tags.SelectMany(kvp => kvp.Value).

有一个Java等价物Map<String, List<Tag>>会产生一个Stream<Tag>吗?

Tun*_*aki 16

您正在查看flatMap地图中包含的所有值:

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

此代码首先将地图的所有值检索为Collection<List<Tag>>with values(),使用此集合创建Stream stream(),然后使用方法引用将每个值平面映射List<Tag>到a .StreamList::stream

  • @RobertFraser这个名字来自[map function](https://en.wikipedia.org/wiki/Map_%28higher-order_function%29),它"映射一个函数"(值列表). (2认同)