为什么新的JDK8Stream
类只包含以下reduce
方法:
T reduce(BinaryOperator<T> reducer)
T reduce(T identity, BinaryOperator<T> reducer)
U reduce(U identity, BiFunction<U, ? super T, U> reducer,
BinaryOperator<U> combiner)
但不是一个明显的方法,它对应于reduce
/fold
其他语言(例如 Haskell foldl :: (a -> b -> a) -> a -> [b] -> a
)中的函数,可能看起来像这样:
U reduce(U identity, BiFunction<U, ? super T, U> reducer)
?
相反,有一个类似的方法,它有一个额外的combiner
参数。我什至不知道如何使用它,因为我上面链接的 API 文档在示例中没有使用这个参数,它只提到了它所需的属性。
为什么 JDK8 方法是这样的,我如何fold
用它们模拟标准行为?