[英]What is a good way to implement the equivalent of Haskell's “or” function using Streams in Java
[英]What is the equivalent of Haskell's scanl in Java's streams?
當這個問題要求python時,在Java的流中Haskell的scanl相當於什么?
到目前為止我提出的最好的是使用
reduce(identity, accumulator, combiner)
使用累加器保存最新結果並將結果累積到列表中,盡管可能不會使用組合器。 我也不確定如何防止它並行使用,它不起作用。
也許Stream是(相當於)scanl的錯誤接口?
看起來標准的Stream API沒有scanl
等價物。 其中一個原因是scanl
是嚴格從左到右的操作,這使得很難從並行處理中獲益(並行處理是Stream API的重要部分)。 但是,您可以使用第三方庫,例如我的免費StreamEx庫。 它擴展了標准的Stream API,增加了許多有用的功能,包括scanLeft
:
List<Integer> list = IntStreamEx.range(10).boxed().scanLeft(Integer::sum);
System.out.println(list);
// outputs [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
即使對於並行流,此scanLeft
操作也可以保證工作,但除非您有一些可以並行化的計算密集型上游操作,否則您不太可能獲得加速。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.