【发布时间】:2016-04-21 10:06:26
【问题描述】:
我注意到Stream 中公开的许多功能显然在Collectors 中重复,例如Stream.map(Foo::bar) 与Collectors.mapping(Foo::bar, ...),或Stream.count() 与Collectors.counting()。这些方法有什么区别?有性能差异吗?它们的实现方式是否不同,会影响它们的并行化程度?
【问题讨论】:
-
收集器在用作另一个收集器的下游操作时很有用。例如
groupingBy采用下游收集器收集映射到同一键的所有元素。你不能在那里使用 Stream 操作。 -
有趣的是,所有采用下游收集器的收集器都有动名词,以
-ing结尾 -
@Tunaki 这如何使相同的方法不同。例如
stream.collect(Collectors.counting())与stream.count()或stream.collect(Collectors.mapping(Foo::bar), anotherCollector)与stream.map(Foo::bar).collect(anotherCollector)。好像有点多余。 -
确实
collect(Collectors.counting())没有优势,但它作为下游收集器确实派上用场,例如collect(partitioningBy(String::isEmpty), Collectors.counting())将结果分成 2 个计数而不是 2 个列表
标签: java java-8 java-stream