Пример программы:
public final class CollectorTest
{
private CollectorTest()
{
}
private static <T> BinaryOperator<T> nope()
{
return (t, u) -> { throw new UnsupportedOperationException("nope"); };
}
public static void main(final String... args)
{
final Collector<Integer, ?, List<Integer>> c
= Collector.of(ArrayList::new, List::add, nope());
IntStream.range(0, 10_000_000).boxed().collect(c);
}
}
Итак, для упрощения здесь нет окончательного преобразования, поэтому полученный код довольно прост.
Теперь IntStream.range()
создает последовательный поток. Я просто помещаю результаты в Integer
, а затем мои надуманные Collector
собирают их в List<Integer>
. Довольно просто.
И независимо от того, сколько раз я запускаю эту примерную программу, UnsupportedOperationException
никогда не попадает, что означает, что мой фиктивный комбайнер никогда не вызывается.
Я как бы ожидал этого, но потом я уже неправильно понял потоки, чтобы задать вопрос...
Может ли когда-нибудь вызываться комбайнер Collector
, когда поток гарантированно будет последовательным?