了解 Java 8 中的拆分器、收集器和流
2022-08-31 07:41:15
您几乎肯定永远不必作为用户处理;仅当您自己编写类型并打算优化其上的并行化操作时,才需要这样做。Spliterator
Collection
就其价值而言,a是一种以一种易于拆分集合部分的方式对集合的元素进行操作的方法,例如,因为您正在并行化并希望一个线程处理集合的一部分,一个线程处理另一个部分,等等。Spliterator
从本质上讲,您也不应该将类型的值保存到变量中。 有点像 ,因为它是一个一次性的对象,你几乎总是在流利的链中使用,就像Javadoc的例子一样:Stream
Stream
Iterator
int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())
.sum();
Collector
是“reduce”操作的最通用,最抽象的可能版本, la map/reduce;特别是,它需要支持并行化和最终确定步骤。的示例包括:Collector
Collectors.reducing(0, (x, y) -> x + y)
Collector.of(StringBuilder::new, StringBuilder::append, StringBuilder::append, StringBuilder::toString)
Spliterator
基本上意味着“可拆分迭代器”。
单线程可以遍历/处理整个拆分器本身,但拆分器也有一个方法,该方法将“拆分”一个部分供其他人(通常是另一个线程)处理 - 使当前拆分器的工作量更少。trySplit()
Collector
将函数(map-reduce 的名声)的规范与初始值和用于组合两个结果的函数组合在一起(从而可以合并 Spliterated 工作流的结果)。reduce
例如,最基本的收集器的初始 vaue 为 0,将一个整数添加到现有结果中,并通过添加两个结果来“合并”两个结果。从而对拆分的整数流求和。
看: