Если вы хотите иметь 1 поток через список, вам нужен способ управления двумя различными состояниями, вы можете сделать это, внедрив Consumer в новый класс.
могу выполнить несколько несвязанных операций над элементами одного потока?
Скажи у меня естьList<String>
состоит из текста. Каждая строка в списке может содержать или не содержать определенное слово, которое представляет действие для выполнения. Скажем так:
List<String>
со всеми подстрокамиКонечно, я мог бы сделать что-то вроде этого:
List<String> strs = ...;
List<Integer> wordsInStr = strs.stream()
.filter(t -> t.contains("of"))
.map(t -> t.split(" ").length)
.collect(Collectors.toList());
List<String> linePortionAfterFor = strs.stream()
.filter(t -> t.contains("for"))
.map(t -> t.substring(t.indexOf("for")))
.collect(Collectors.toList());
но тогда список будет пересмотрен дважды, что может привести к снижению производительности, еслиstrs
содержал много элементов.
Можно ли как-то выполнить эти две операции, не проходя дважды по списку?