Quando chiamo Stream.sort(..)
c'è una nuova serie di elementi creati e il flusso itera sopra l'array ordinato appena creato?
In altre parole, come Java 8 Stream fa sort
sotto il cofano?
Puoi utilizzare grepcode.com per cercare attraverso il codice della libreria standard Java (e alcune altre librerie). Sfortunatamente, il codice di implementazione del flusso è piuttosto astratto. Un buon punto di partenza è il java.util.stream.SortedOps
class che trasforma uno stream in un flusso ordinato.
Il implementazione corrente (utilizzato per flussi di contenitori di librerie standard) lo rende un no-op se lo stream è già ordinato, usa un array se la dimensione del flusso è noto ( SizedRefSortingSink
), o accumula tutti gli elementi in un ArrayList se la dimensione è sconosciuta ( RefSortingSink
).
Naturalmente, tali dettagli di implementazione possono cambiare con qualsiasi versione, ma le considerazioni fondamentali sono universali: l'ordinamento di uno stream è necessariamente un'operazione di tipo eager e di blocco e l'ordinamento di un flusso infinito non è significativo. Ciò significa che l'ordinamento di un flusso non è utile se si utilizzano i flussi perché possono essere pigri, ma si ottiene comunque la comoda sintassi del flusso.
Gli altri stream dovranno fornire la loro implementazione di Stream.sorted()
, che sarà probabilmente simile.
Leggi altre domande sui tag java java8 stream-processing