- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
作为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/
我注意到 GHC manual说“对于自递归函数,循环断路器只能是函数本身,因此总是忽略 INLINE 杂注。” 这不是说像 map 这样的常见递归函数构造的每个应用程序吗? , zip , scan
foldl 功能自带严格模拟 foldl' . scanl 有什么原因吗?不需要scanl'替代方案还是他们根本没有将其包含在标准库中? 最佳答案 没有必要。 foldl' 的严格性允许它在遍历其输入
我试图理解如何在 haskell 中计算斐波那契数列如此之快。 列表定义是 fibs = 1 : scanl (+) 1 fibs 1 :: (1: scanl (+) 1 fibs) !! 0 :
是否有与 Haskell scanl/scanr 等效的 F# 工具?这些函数执行折叠,但它们以列表的形式报告所有中间累加器状态。 最佳答案 是的,他们是List.scan和 List.scanBac
作为this question问python,什么相当于Haskell的scanl在Java的流中? 到目前为止我想到的最好的方法是使用 reduce(identity, accumulator, c
This question在 Python 中展示了 Haskell 的 scanl 版本,但是这个函数有 Ruby 版本吗? 最佳答案 可以使用reduce(),自己实现。 def scanl(op
如果我有一个数字列表 [1, 2, 3, 4, 5] 并且我想生成一个累积和列表,在 Haskell 中我会执行以下操作: > let xs = [1, 2, 3, 4, 5] > scanl (+)
我是一名优秀的程序员,十分优秀!