Realizar múltiples operaciones no relacionadas en elementos de una sola secuencia en Java

¿Cómo puedo realizar múltiples operaciones no relacionadas en elementos de una sola secuencia?

Digamos que tengo unList<String> compuesto de un texto. Cada cadena de la lista puede o no contener una palabra determinada, lo que representa una acción a realizar. Digamos que:

si la cadena contiene 'de', se deben contar todas las palabras en esa cadenasi la cadena contiene 'for', la porción después de la primera aparición de 'for' debe devolverse, produciendo unList<String> con todas las subcadenas

Por supuesto, podría hacer algo como esto:

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

pero luego la lista se atravesaría dos veces, lo que podría resultar en una penalización de rendimiento sistrs contenía muchos elementos.

¿Es posible ejecutar de alguna manera esas dos operaciones sin atravesar dos veces la lista?

Respuestas a la pregunta(4)

Su respuesta a la pregunta