Embora forEachmais curto e pareça mais bonito, eu sugiro usar forEachOrderedem todos os lugares onde a ordem é importante para especificar isso explicitamente. Para fluxos sequenciais, forEachparece respeitar a ordem e até mesmo usar o código interno da API de fluxo forEach(para fluxos sabidamente sequenciais) onde é semanticamente necessário usar forEachOrdered! No entanto, você pode decidir posteriormente alterar seu fluxo para paralelo e seu código será quebrado. Além disso, quando você usa forEachOrderedo leitor de seu código, vê a mensagem: "a ordem é importante aqui". Assim, documenta melhor o seu código.
Observe também que, para fluxos paralelos, forEachnão apenas é executado em ordem não determinística, mas também pode ser executado simultaneamente em diferentes threads para diferentes elementos (o que não é possível com forEachOrdered).
Finalmente, ambos forEach/ forEachOrderedraramente são úteis. Na maioria dos casos, você realmente precisa produzir algum resultado, não apenas efeito colateral, portanto, operações semelhantes reduceou collectdevem ser mais adequadas. Expressar a operação de redução natural via forEachgeralmente é considerado um estilo ruim.