【问题标题】:Reduce Map object into ArrayList将 Map 对象缩减为 ArrayList
【发布时间】:2017-09-13 23:11:07
【问题描述】:

我有一个由 4 个工作人员组成的分布式系统,每个工作人员都向减速器发送 1 个 Map 对象,以便将它们简化为 ArrayList

我尝试解决的方法是将所有 Map 项从工作人员收集到一个 ArrayList 中,然后使用并行流我想使用 reduce 方法将它们减少到我已初始化到 reducer 的列表中。这是我的代码:

    ArrayList<MyClass> result = new ArrayList<MyClass>();
    maps.parallelStream().reduce(null, (res, m)->{
        result.add(m.get(key));
    });

reduce 方法出现以下编译错误:

Stream>类型中的reduce(Map,BinaryOperator>)方法不适用于参数(null,( res, m) -> {})

【问题讨论】:

  • 不需要并行流。使用列表中的addAll 方法添加您使用values 获得的映射中的所有值。
  • 没有java.util.Map#parallelStream...但也许你可以使用这个:List&lt;Object&gt; objects = maps.values().parallelStream().collect(Collectors.toList());
  • 也许用new ArrayList&lt;&gt;(maps.values());
  • 假设 list 是您的地图列表,请尝试以下操作:List&lt;MyClass&gt; result = list.stream().flatMap(v -&gt; v.values().stream()).collect(Collectors.toList());
  • @JureKolenko 成功了。谢谢。你可以把它作为答案,以便我批准它

标签: java mapreduce hashmap java-stream


【解决方案1】:

假设list 是您的地图列表,请尝试以下操作:

List<MyClass> result = list.stream()
    .flatMap(v -> v.values().stream()).collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2020-10-29
    • 2023-02-07
    • 2016-09-23
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多