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 sortsotto 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 sortsotto 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.SortedOpsclasse 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.