收集器的组合函数是否可以在顺序流上使用?
- 论坛
- 收集器的组合函数是否可以在顺序流上使用?
23 浏览
收集器的组合函数是否可以在顺序流上使用?
示例程序:
public final class CollectorTest { private CollectorTest() { } private staticBinaryOperator nope() { return (t, u) -> { throw new UnsupportedOperationException("nope"); }; } public static void main(final String... args) { final Collector > c = Collector.of(ArrayList::new, List::add, nope()); IntStream.range(0, 10_000_000).boxed().collect(c); } }
因此,在这里简化问题,没有最终的转换,所以生成的代码非常简单。
现在,`IntStream.range()` 产生一个顺序流。我只需将结果装箱为 `Integer`,然后我的虚构的 `Collector` 将它们收集到一个 `List
无论我运行这个示例程序多少次,`UnsupportedOperationException` 从未触发,这意味着我的虚拟组合器从未被调用。
我有点预料到这一点,但是我已经对流的理解有误,所以我不得不提出问题...
当流被保证是顺序的时,`Collector` 的组合器是否会被调用?