Quand j'appelle Stream.sort(..)
Existe-t-il une nouvelle gamme d'éléments créés et le flux iTère sur le tableau de triés nouvellement créé?
En d'autres termes, comment Java 8 Stream fait sort
sous la hotte?
Vous pouvez utiliser grepcode.com pour rechercher via Java code de bibliothèque standard (et d'autres bibliothèques). Malheureusement, le code de mise en œuvre du flux est plutôt abstrait. Un bon début Le point est la classe interne Java.util.stream.SortedOps
qui transforme un flux en un flux de tri.
Le Mise en œuvre actuelle (utilisé pour les flux de conteneurs de bibliothèque standard) en fait un NON-OP si le flux est déjà trié, utilise un tableau si la taille du flux est connue ( SizedRefSortingSink
), ou accumule tous les éléments dans une arrachelist si la taille est inconnue ( RefSortingSink
).
Bien entendu, ces détails de la mise en œuvre peuvent changer avec toute libération, mais les considérations fondamentales sont universelles: le tri d'un flux est nécessairement une opération désireuse/bloquante et trier un flux infini n'est pas significatif. Cela signifie trier un flux n'est pas utile si vous utilisez des flux car ils peuvent être paresseux, mais vous obtenez toujours la syntaxe de flux pratique.
D'autres flux devront fournir leur propre implémentation de Stream.sorted()
, qui sera probablement similaire.