簡體   English   中英

在Java的流中,Haskell的scanl相當於什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM