gpt4 book ai didi

Java并行流产生HashMap

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:03 24 4
gpt4 key购买 nike

我有以下测试,测试从 0 到 max 的整数,如果通过验证,则构造对 (vals[i], i)。最后,我想生成一个 HashMap,它使用 vals[i] 作为键,值是整数列表。代码看起来像,

IntStream.range(0, max)
.parallel()
.filter(i-> sometest(i))
.mapToObj(i -> new Pair<>(vals[i],i))
.collect(groupingBy(Pair::getFirst, mapping(Pair::getSecond, toList())));

我的问题是,是否可以使用并行流来加速该 map 的构建?

谢谢。

最佳答案

如果你只是想知道如何更好地利用并行性,你可以这样做:

ConcurrentMap<Integer, List<Integer>> map = IntStream.range(0, Integer.MAX_VALUE)
.parallel()
.filter(i -> i % 2 == 0)
.boxed()
.collect(Collectors.groupingByConcurrent(
i -> i / 3,
Collectors.mapping(i -> i, Collectors.toList())));

不需要中间创建Pairs,groupingByConcurrent并行累加到新的ConcurrentMap。

请记住,对于并行流,您只能使用常见的 ForkJoinPool。对于并行化,最好使用更灵活的东西,例如 ExecutorService 而不是 Java Streams。

关于Java并行流产生HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com