gpt4 book ai didi

java - 为什么使用 Java 的流 API 收集器进行管道分组需要更多时间?

转载 作者:行者123 更新时间:2023-11-30 12:05:10 24 4
gpt4 key购买 nike

我正在使用 Stream API 从列表中创建 map 的 map 。列表包含 1000 万条记录。我已经使用如下两个“groupingBy”操作通过单个语句完成了此操作。问题是这一行语句的执行时间将近 1.5 分钟,这成为我的性能关键型应用程序执行的瓶颈。

我在下面使用并行流 API 给出了我尝试过的代码

Map<MyKey, Map<String, List<Person>>> personMap = personList.parallelStream()
.collect(Collectors.groupingBy(
person -> new MyKey(person.Id(), person.getPricePointId()),
Collectors.groupingBy(Person::getWorkType)));

执行上述代码需要 1.5 多分钟,几乎占我总执行时间的 75%。我没有找到比这更快的其他解决方案。所以我的问题是,对于这么多数据,这是最大可能的吞吐量吗?或者在这里使用下游(多个 groupingBy)不是正确的选择?如果不是,减少执行时间的正确方法应该是什么?

最佳答案

你正在做的是一个坏主意查询 1000 万条记录需要大量内存因此,将您的查询分组为限制和起点,并根据限制和起点划分查询,并在单独的线程中运行每个查询,最后加入线程。对于您的用例,它会更快更高效

关于java - 为什么使用 Java 的流 API 收集器进行管道分组需要更多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576707/

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