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)

questionAnswers(2)

yourAnswerToTheQuestion