Quando ligo, Stream.sort(..)
existe uma nova matriz de elementos criada e o fluxo itera sobre a matriz classificada criada recentemente?
Em outras palavras, como o Java 8 Stream se sort
comporta?
Quando ligo, Stream.sort(..)
existe uma nova matriz de elementos criada e o fluxo itera sobre a matriz classificada criada recentemente?
Em outras palavras, como o Java 8 Stream se sort
comporta?
Respostas:
Você pode usar o grepcode.com para pesquisar o código da biblioteca padrão Java (e algumas outras bibliotecas). Infelizmente, o código de implementação do fluxo é bastante abstrato. Um bom ponto de partida é a java.util.stream.SortedOps
classe interna que transforma um fluxo em um fluxo classificado.
A implementação atual (usada para fluxos de contêineres de bibliotecas padrão) o torna inoperante se o fluxo já estiver classificado, usa uma matriz se o tamanho do fluxo for conhecido ( SizedRefSortingSink
) ou acumula todos os elementos em um ArrayList se o tamanho for desconhecido ( RefSortingSink
).
Obviamente, esses detalhes de implementação podem mudar com qualquer versão, mas as considerações fundamentais são universais: classificar um fluxo é necessariamente uma operação ágil / de bloqueio e classificar um fluxo infinito não é significativo. Isso significa que a classificação de um fluxo não será útil se você usar fluxos porque eles podem ser preguiçosos, mas você ainda obtém a sintaxe conveniente do fluxo.
Outros fluxos terão que fornecer sua própria implementação Stream.sorted()
, o que provavelmente será semelhante.