¿Cuál es la forma más fácil / más corta de convertir un Java 8 Stream
en una matriz?
java
arrays
java-8
java-stream
MC Emperor
fuente
fuente
Respuestas:
El método más fácil es usar el
toArray(IntFunction<A[]> generator)
método con una referencia de constructor de matriz. Esto se sugiere en la documentación de la API para el método .Lo que hace es encontrar un método que tome un número entero (el tamaño) como argumento y devuelva a
String[]
, que es exactamente lo que hace (una de las sobrecargas de)new String[]
.También puedes escribir el tuyo
IntFunction
:El propósito de la
IntFunction<A[]> generator
es convertir un número entero, el tamaño de la matriz, en una nueva matriz.Código de ejemplo:
Huellas dactilares:
fuente
toArray(sz -> new String[sz])
lo que no estoy seguro de que realmente se pueda decir cuál debería ser o debe ser la solución.sz -> new String[sz]
una nueva función donde la referencia del constructor no. Depende de cuánto valoras Garurn Collection Churn, supongo.private
método , que no puede causar abandono, y ambas versiones necesitan crear un nuevo objeto. Una referencia crea un objeto que apunta directamente al método de destino; una lambda crea un objeto que apunta al generadoprivate
. Una referencia a un constructor aún debería funcionar mejor por falta de indirección y una optimización de VM más fácil, pero el batido no tiene nada que ver con eso.Si desea obtener una matriz de entradas, con valores del 1 al 10, de un Stream, hay IntStream a su disposición.
Aquí creamos un Stream con un método Stream.of y convertimos un Stream en un IntStream usando un mapToInt. Entonces podemos llamar al método toArray de IntStream.
Aquí es lo mismo, sin Stream, usando solo IntStream
fuente
Puede convertir un flujo de Java 8 en una matriz usando este bloque de código simple:
Pero expliquemos más las cosas, primero, creemos una lista de cadenas llenas de tres valores:
Crear una secuencia de la matriz dada:
ahora podemos realizar algunas operaciones en esta secuencia Ej:
y finalmente conviértalo a java 8 Array usando estos métodos:
1-Método clásico (interfaz funcional)
2 -Expresión de Lambda
3- Referencia del método
Referencia del método Explicación:
Es otra forma de escribir una expresión lambda que es estrictamente equivalente a la otra.
fuente
Convierta el texto en una matriz de cadenas donde separe cada valor por coma y recorte cada campo, por ejemplo:
fuente
Puede crear un recopilador personalizado que convierta una secuencia en matriz.
y un uso rápido
fuente
Collectors.groupingBy
para poder asignar algún atributo a matrices de objetos por valor de atributo. Esta respuesta me da exactamente eso. También @DidierL.El uso del
toArray(IntFunction<A[]> generator)
método es, de hecho, una forma muy elegante y segura de convertir (o más correctamente, recopilar) un Stream en una matriz del mismo tipo de Stream.Sin embargo, si el tipo de matriz devuelta no es importante, simplemente usar el
toArray()
método es más fácil y más corto. Por ejemplo:fuente
fuente
Pruébelo en línea: https://repl.it/@SmaMa/Stream-to-array
fuente
fuente
Puede hacerlo de varias maneras. Todas las formas son técnicamente iguales, pero el uso de Lambda simplificaría parte del código. Digamos que inicializamos una Lista primero con String, llamémosla personas.
Ahora puede usar cualquiera de las siguientes formas.
Usando la expresión Lambda para crear un nuevo StringArray con un tamaño definido.
String [] stringArray = stream.toArray (size-> new String [size]);
Usando el método de referencia directamente.
String [] stringArray = stream.toArray (String [] :: new);
fuente