Соберите как минимум, так и максимум в одном потоке - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно вывести как min, так и max потока int за одну операцию. У меня сейчас 2 операции, но вторая не разрешена. У меня почему-то не работают коллекционеры:

Stream<Integer> stringInt = Stream.of(8,50,16,0,72);
System.out.println(stringInt.reduce(Math::min).get());
System.out.println(stringInt.reduce(Math::max).get());

1 Ответ

1 голос
/ 18 марта 2019

Вторая недопустима, поскольку поток не может быть использован повторно. От Stream javadoc:

Поток должен работать (вызывая промежуточную или терминальную операцию потока) только один раз. Это исключает, например, «разветвленные» потоки, когда один и тот же источник передает два или более конвейеров, или несколько обходов одного и того же потока. Реализация потока может вызвать исключение IllegalStateException, если обнаружит, что поток используется повторно.

Вы можете использовать collect с Collectors.summarizingInt:

IntSummaryStatistics collect = stringInt.collect(Collectors.summarizingInt(value -> value));

System.out.println(collect.getMax());
System.out.println(collect.getMin());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...