Ordenação de operações intermediárias de fluxo
Há garantia de que, ao trabalhar com um fluxo, operações intermediárias sejam executadas na ordem do programa? Eu suspeito que seja o caso ou isso levaria a erros muito sutis, mas não consegui encontrar uma resposta definitiva.
Exemplo:
List<String> list = Arrays.asList("a", "b", "c");
List<String> modified = list.parallelStream()
.map(s -> s + "-" + s) //"a-a", "b-b", "c-c"
.filter(s -> !s.equals("b-b")) //"a-a", "c-c"
.map(s -> s.substring(2)) //"a", "c"
.collect(toList());
Isso garante sempre o retorno["a", "c"]
ou["c", "a"]
? (se a última operação do mapa for executada antes da primeira operação do mapa, isso poderá gerar uma exceção - da mesma forma, se o filtro for executado após a segunda operação do mapa, "b" será retido na lista final)