gpt4 book ai didi

java - Java 流中的 Haskell scanl 等价物是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 19:53:40 25 4
gpt4 key购买 nike

作为this question问python,什么相当于Haskell的scanl在Java的流中?

到目前为止我想到的最好的方法是使用

reduce(identity, accumulator, combiner)

用一个累加器保存最新的结果并将结果累加到一个列表中,尽管组合器可能不会被使用。我也不确定如何防止它在并行使用时不起作用。

也许 Stream 是(等同于)scanl 的错误接口(interface)?

最佳答案

看起来标准 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 操作保证即使在并行流中也能正常工作,但除非您有一些可以并行化的计算密集型上游操作,否则您不太可能获得加速。

关于java - Java 流中的 Haskell scanl 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34197567/

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