【问题标题】:Java Stream equivalent of LINQ SelectMany()Java Stream 等效于 LINQ SelectMany()
【发布时间】:2016-03-14 15:49:15
【问题描述】:

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

例如,在 C# 中,如果我想将 Dictionary<string, List<Tag>> tags 转换为 IEnumerable<Tag>(字典中所有标签的平面枚举),我会使用 tags.SelectMany(kvp => kvp.Value)。

是否存在与Map<String, List<Tag>> 对应的 Java 等效项,可以产生 Stream<Tag>?

【问题讨论】:

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


    【解决方案1】:

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

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

    此代码首先检索映射的所有值作为 Collection&lt;List&lt;Tag&gt;&gt; 和 values(),使用 stream() 从该集合中创建一个 Stream,然后将每个 List&lt;Tag&gt; 平面映射到 Stream 与方法参考List::stream.

    【讨论】:

    • @RobertFraser 他们不要混淆
    • @RobertFraser 该名称来自map function,它在(一列)值上“映射一个函数”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多