java – 奇怪的“减少”方法组在JDK8批量收集操作库中
为什么新的JDK8
Stream 类仅包含以下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) 但不是一个明显的方法,对应于在其他语言(例如Haskell foldl ::(a – > b – > a) – > a – > [b] – a)中发现的缩减/折叠功能,可能看起来像这样: U reduce(U identity,U> reducer) ? 相反,有一个类似的方法,它具有一个额外的组合器参数.我甚至不知道如何使用它,因为我链接到上面的API文档在示例中不使用此参数,它只提及其所需的属性. 为什么JDK8方法是这样做的,我如何模仿标准的折叠行为? 解决方法
类似缩减的数据并行操作用作数据集(例如元素阵列)上的一般值聚合操作.您可以使用它们来实现,例如,总和.
没有指定数据集的值组合在一起(例如求和)的顺序,因此它们不对应于在Haskell中找到的foldl或Scala中找到的reduceLeft / foldLeft. 当聚合的结果类型与元素的类型不同时,将使用第三行中的额外组合器参数.在这些情况下,您必须指定如何将两个结果组合在一起. (Integer count,Character c) -> if (isVowel(c)) count + 1 else count 组合器只是一个总和: (Integer count1,Integer count2) -> count1 + count2 例如,Scala Parallel Collections有这些for a while now(搜索聚合). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |