TL; DR : не использовать потоки, в которых итеративный подход лучше.
Хотя это можно сделать, такое преобразование будет либо неэффективным, либо довольно сложным, и в любом случае победит цель потока. В вашем коде есть две точки, поэтому итеративный подход здесь предпочтительнее потоковой передачи:
вы изменяете переменную состояния count
, в то время как функции потока должны быть предпочтительно без состояния
вы используете break
для преждевременного завершения итерации sh, в то время как потоки обычно не заканчиваются sh до тех пор, пока не будут обработаны все элементы.
Можно оторваться от потоков преждевременно, но это сложно . Также возможно избежать изменения внешней переменной, связав каждый токен ввода с его порядковым номером, но полученный код будет медленнее и сложнее для чтения.
Пример того, как код может выглядеть:
System.out.println(new BufferedReader(new InputStreamReader(System.in)).lines()
.mapToInt(Integer::valueOf)
.takeWhile(number -> number != 5)
.count() + 1);