Quando chiamo, Stream.sort(..)
viene creato un nuovo array di elementi e il flusso scorre sull'array ordinato appena creato?
In altre parole, come funziona Java 8 Stream sort
sotto il cofano?
Quando chiamo, Stream.sort(..)
viene creato un nuovo array di elementi e il flusso scorre sull'array ordinato appena creato?
In altre parole, come funziona Java 8 Stream sort
sotto il cofano?
Risposte:
Puoi usare 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 è la java.util.stream.SortedOps
classe interna che trasforma un flusso in un flusso ordinato.
L' implementazione corrente (utilizzata per i flussi di contenitori di librerie standard) lo rende non operativo se il flusso è già ordinato, utilizza un array se la dimensione del flusso è nota ( SizedRefSortingSink
) o accumula tutti gli elementi in un ArrayList se la dimensione è sconosciuto ( RefSortingSink
).
Naturalmente, tali dettagli di implementazione possono cambiare con qualsiasi versione, ma le considerazioni fondamentali sono universali: l'ordinamento di un flusso è necessariamente un'operazione desiderosa / bloccante e l'ordinamento di un flusso infinito non è significativo. Ciò significa che l'ordinamento di un flusso non è utile se si utilizzano flussi perché possono essere pigri, ma si ottiene comunque la sintassi del flusso conveniente.
Altri flussi dovranno fornire la propria implementazione di Stream.sorted()
, che sarà probabilmente simile.