Quais operações preservam a ordem [duplicada]
Esta pergunta já tem uma resposta aqui:
Como garantir a ordem de processamento nos fluxos java8? 2 respostasTL; DR; Estou procurando um local onde possa procurar se uma determinada operação intermediária ou terminal. Onde posso encontrar essa documentação?
Edita Esta não é uma duplicata deComo garantir a ordem de processamento nos fluxos java8?, pois essa pergunta não fornece uma lista abrangente de operaçõe
FundOa documentação do pacote diz:
Se um fluxo tem ou não uma ordem de encontro, depende da origem e das operações intermediárias
Qual é repetido emesta excelente resposta do stackoverflow
Para garantir a manutenção do pedido durante toda uma operação de fluxo, você deve estudar a documentação da fonte do fluxo, todas as operações intermediárias e a operação do terminal para manter ou não o pedido (ou se a fonte possui um pedido no primeiro lugar)
Está tudo bem, mas qual documentação devo examinar? Oa documentação do pacote menciona em um exemplo quemap
garante pedidos, mas não possui uma lista exaustiva. Ojavadoc para a classe Stream documenta algumas operações intermediárias, mas não todas. Considere por exemplomap
:
Retorna um fluxo que consiste nos resultados da aplicação da função fornecida aos elementos desse flux
Esta é uma operação intermediári
orfilter
Retorna um fluxo que consiste nos elementos desse fluxo que correspondem ao predicado especificad
Esta é uma operação intermediári
Nenhuma delas descreve se preserva a encomend
This stackoverflow answer reivindicações:
Na verdade, toda operação intermediária preserva um pedido por padrão. As únicas exceções são:
unordered () que remove a restrição de pedidosorted () que altera a ordem.Quando não for especificado explicitamente, você pode assumir que a operação mantém o pedido. Mesmo distinto () mantém a ordem, embora adicione muita complexidade ao fluxo paralel
mas existe alguma documentação oficial para comprovar isso?
Crédito extrNa verdade, existem dois problemas de pedidos separado
A saída da operação mantém a mesma ordem que a entrada? operação é executada em ordem em cada element Por exemplo, um paralelomap
operação @ poderia repassar todos os elementos em uma ordem arbitrária (violando 2.), mas ainda manter a ordem no fluxo retornado (obedecendo a 1.)