【问题标题】:Adding concurrency with iterating over a collection, mapping to multiple hash maps and reducing to one通过迭代集合添加并发性,映射到多个哈希映射并减少到一个
【发布时间】:2018-12-22 03:57:14
【问题描述】:

有一个特定的用例,但不太确定最佳方法。

所以目前的方法是我正在迭代对象集合(可关闭的迭代器)并将它们映射到哈希图中(适当地处理冲突,通过对象的日期属性进行比较)。

我正在寻找一种并行方法来加快速度,最初的想法是使用 Java 8 流和并行和 forEach,利用并发哈希图来启用并发。这种方法的主要瓶颈似乎是并发 hashmap,并且这种方法在增加并发性方面没有任何改进。

我现在的想法是映射到多个并行的哈希映射。然后 reduce 成一个单独的 hashmap 来适当地处理冲突。想知道如何使用 Streams 在 Java 中实现这种方法。我知道有内置的 map 和 reduce 操作,但不确定收集多个 hashmap 的方法(执行操作并添加到集合中?)。

【问题讨论】:

  • 对于另一种方法,想法是并行映射到多个哈希图。然后缩减为一个单独的哈希图来适当地处理冲突。这正是Collectors.toMap() 将立即执行的操作。
  • 抱歉,这不是 StackOverflow 的工作方式。正如tour 中所述,此站点是有用问题及其答案的存储库,不是帮助论坛,也不是讨论论坛。所述问题过于宽泛,并且正在征求意见/讨论,这是题外话。有很多编程论坛可以讨论这方面的问题,但不幸的是,SO 不是合适的地方。
  • "对于另一种方法,想法是并行映射到多个 hashmap。然后减少到一个单独的 hashmap 以适当地处理冲突。想知道我将如何在 Java 中使用 Streams 实现这种方法"跨度>
  • 这是我的具体问题。我只是为其他人添加了选项,如果他们愿意,他们可以提出想法。更改了问题以使其更清楚。

标签: java multithreading java-8 mapreduce concurrenthashmap


【解决方案1】:

尝试使用 groupingBy() 函数。例如

stream.collect(Collectors.groupingBy(Locale::getCountry));

生成一张地图,其中国家/地区作为键,区域设置以该国家/地区作为值

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多