Executar várias operações não relacionadas nos elementos de um único fluxo em Java

Como posso executar várias operações não relacionadas nos elementos de um único fluxo?

Diga que eu tenho umList<String> composto a partir de um texto. Cada sequência na lista pode ou não conter uma determinada palavra, o que representa uma ação a ser executada. Digamos que:

se a string contiver 'of', todas as palavras nessa string deverão ser contadasse a string contiver 'for', a parte após a primeira ocorrência de 'for' deverá ser retornada, produzindo umList<String> com todas as substrings

Claro, eu poderia fazer algo assim:

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());

mas a lista seria percorrida duas vezes, o que poderia resultar em uma penalidade de desempenho sestrs continha muitos elementos.

É possível, de alguma forma, executar essas duas operações sem percorrer duas vezes a lista?

questionAnswers(4)

yourAnswerToTheQuestion