Cuando llamo, Stream.sort(..)
¿hay una nueva matriz de elementos creados y la secuencia itera sobre la matriz ordenada recién creada?
En otras palabras, ¿cómo funciona Java 8 Stream sort
bajo el capó?
java
java8
stream-processing
InformadoA
fuente
fuente
Respuestas:
Puede usar grepcode.com para buscar a través del código de la biblioteca estándar de Java (y algunas otras bibliotecas). Desafortunadamente, el código de implementación del flujo es bastante abstracto. Un buen punto de partida es la
java.util.stream.SortedOps
clase interna que transforma una secuencia en una secuencia ordenada.La implementación actual (utilizada para flujos de contenedores de biblioteca estándar) lo convierte en un no-op si el flujo ya está ordenado, usa una matriz si se conoce el tamaño del flujo (
SizedRefSortingSink
) o acumula todos los elementos en una ArrayList si el tamaño es desconocido (RefSortingSink
).Por supuesto, dichos detalles de implementación pueden cambiar con cualquier versión, pero las consideraciones fundamentales son universales: la clasificación de una secuencia es necesariamente una operación entusiasta / de bloqueo, y la clasificación de una secuencia infinita no tiene sentido. Esto significa que ordenar una secuencia no es útil si usa secuencias porque pueden ser diferidas, pero aún así obtiene la sintaxis de secuencia conveniente.
Otros flujos tendrán que proporcionar su propia implementación de
Stream.sorted()
, que probablemente será similar.fuente