Come funziona lo smistamento con lo stream di java 8 sotto il cofano?

8

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?

    
posta InformedA 30.09.2016 - 21:51
fonte

1 risposta

8

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.

    
risposta data 30.09.2016 - 22:20
fonte

Leggi altre domande sui tag