¿Cómo funciona la clasificación con java 8 stream bajo el capó?

8

Cuando llamo a Stream.sort(..) , ¿se crea una nueva matriz de elementos y la secuencia se repite en la matriz ordenada recién creada?

En otras palabras, ¿cómo Java 8 Stream hace sort debajo del capó?

    
pregunta InformedA 30.09.2016 - 21:51

1 respuesta

8

Puede utilizar 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 inicio es el interno java.util.stream.SortedOps class que transforma una secuencia en una secuencia ordenada.

El implementación actual (utilizada para secuencias de contenedores de bibliotecas estándar) hace que no sea una opción si la secuencia ya está ordenada, usa una matriz si el tamaño de la transmisión es conocida ( 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 impaciente / de bloqueo, y la clasificación de una corriente infinita no es significativa. Esto significa que ordenar una secuencia no es útil si usa secuencias porque pueden ser perezosas, pero aún así obtiene la sintaxis de la secuencia conveniente.

Otras transmisiones tendrán que proporcionar su propia implementación de Stream.sorted() , que probablemente será similar.

    
respondido por el amon 30.09.2016 - 22:20

Lea otras preguntas en las etiquetas