Embora forEach
mais curto e pareça mais bonito, eu sugiro usar forEachOrdered
em todos os lugares onde a ordem é importante para especificar isso explicitamente. Para fluxos sequenciais, forEach
parece 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 forEachOrdered
o 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, forEach
nã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
/ forEachOrdered
raramente são úteis. Na maioria dos casos, você realmente precisa produzir algum resultado, não apenas efeito colateral, portanto, operações semelhantes reduce
ou collect
devem ser mais adequadas. Expressar a operação de redução natural via forEach
geralmente é considerado um estilo ruim.