【发布时间】:2017-07-18 10:15:53
【问题描述】:
我正在尝试通过编写类似的内容来显示我的并行流的进度
int total=myList.size();
AtomicInteger counter=new AtomicInteger(0);
List<String> myResult=IntStream.range(0, total)
.parallel()
.mapToObj(i-> modify(myList.get(i)))
.peek(i->System.out.print("\r"+(counter.getAndIncrement()*100/total)+"%"))
.collect(toList());
我的问题来自“\r”。鉴于它是并行化的,当并发事件发生时,真正到达行首所需的“\r”数量可能会有所不同。所以有时我可以读到“70% 71%”...
【问题讨论】:
-
为什么要自己添加退货? println 有什么问题?
-
println 转到下一行。我想用新百分比替换旧百分比。在同一行。
-
嗯?你不能那样做。
-
@Michael 为什么不呢,我的意思是使用
\\r跳转到当前行的开头?运行良好(在 Linux 上)。您肯定必须有一个终端来接受这一点,这与 Eclipse 控制台和可能的 Windows 控制台不同。 -
@CarlosHeuberger 好的,我刚刚查了一下。我不理解单独使用回车的确切语义。看起来它可能会在 Windows 上运行。
标签: java parallel-processing java-stream