收集器的组合函数是否可以在顺序流上使用?

23 浏览
0 Comments

收集器的组合函数是否可以在顺序流上使用?

示例程序:

public final class CollectorTest {
    private CollectorTest() {
    }
    private static  BinaryOperator 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` 的组合器是否会被调用?

0