Вы используете неоптимальный подход Stream
. Подумайте о каждом шаге в Stream
как об изменении существующего (или создании нового) элемента и верните его обратно в Stream
. Наконец, вы получаете final
результат и можете использовать один из методов final
, чтобы завершить (и фактически запустить весь поток работающий) Stream
:
List<Integer> listInteger = Arrays.asList(2, 4, 6, 8, 12, 17, 1234);
listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a = a + 1);
listInteger.stream().forEach(System.out::println);
Здесь у вас есть начальный массив. Вы хотите сделать следующее:
- Отфильтровать некоторые элементы (это не
final
шаг);
- Печать отфильтрованных элементов (это
final
шаг).
Для этого вам не нужно создавать Streams
два раза. Используйте один:
Stream.of(2, 4, 6, 8, 12, 17, 1234) // create stream (there're many way to do it)
.filter(v -> v % 2 == 0) // filter out required elements
.map(v -> v + 1) // transform elements using given rule
.forEach(System.out::println); // finalize stream with printing out each element separately
Примечание: Stream.of(...)
создает Stream
, затем мы добавляем два шага к потоку filter
и map
и затем finalize
или START созданный поток с forEach
.