gpt4 book ai didi

java - 显示 Java 8 流处理的进度

转载 作者:IT老高 更新时间:2023-10-28 21:12:59 24 4
gpt4 key购买 nike

我有一个处理数百万个元素的 Stream。它背后的 Map-Reduce 算法需要几毫秒,所以任务完成大约需要二十分钟。

Stream<MyData> myStream = readData();
MyResult result = myStream
.map(row -> process(row))
.peek(stat -> System.out.println("Hi, I processed another item"))
.reduce(MyStat::aggregate);

我想要一种显示整体进度的方法,而不是为每个元素打印一行(这会导致每秒数千行,需要时间并且不提供有关整体进度的任何有用信息)。我想显示类似于:

 5% (08s)
10% (14s)
15% (20s)
...

最好(和/或最简单)的方法是什么?

最佳答案

首先,Streams 并不是为了完成这类任务(与经典数据结构相反)。如果您已经知道您的流将处理多少个元素,您可能会选择以下选项,我重复一遍,这不是流的目标。

Stream<MyData> myStream = readData();
final AtomicInteger loader = new AtomicInteger();
int fivePercent = elementsCount / 20;
MyResult result = myStream
.map(row -> process(row))
.peek(stat -> {
if (loader.incrementAndGet() % fivePercent == 0) {
System.out.println(loader.get() + " elements on " + elementsCount + " treated");
System.out.println((5*(loader.get() / fivePercent)) + "%");
}
})
.reduce(MyStat::aggregate);

关于java - 显示 Java 8 流处理的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50785508/

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