¿Cuál es la forma más fácil / corta de convertir un Java 8 Stream
en una matriz?
El método más sencillo es utilizar 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 .
String[] stringArray = stringStream.toArray(String[]::new);
Lo que hace es encontrar un método que toma un número entero (el tamaño) como argumento y devuelve un String[]
, que es exactamente lo que hace (una de las sobrecargas de) new String[]
.
También puedes escribir el tuyo propio IntFunction
:
Stream<String> stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]);
El propósito de IntFunction<A[]> generator
es convertir un número entero, el tamaño de la matriz, en una nueva matriz.
Código de ejemplo:
Stream<String> stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);
Huellas dactilares:
a
b
c
Si desea obtener una matriz de enteros, con valores de 1 a 10, de a Stream<Integer>
, está IntStream
a su disposición.
Aquí creamos un Stream
con un Stream.of
método y convertimos Stream<Integer>
a en un IntStream
usando a mapToInt
. Entonces podemos llamar IntStream
al toArray
método de.
Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//or use this to create our stream
//Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array = stream.mapToInt(x -> x).toArray();
Aquí es lo mismo, sin el Stream<Integer>
, usando solo el IntStream
:
int[]array2 = IntStream.rangeClosed(1, 10).toArray();
Puede convertir una secuencia de Java 8 en una matriz utilizando este bloque de código simple:
String[] myNewArray3 = myNewStream.toArray(String[]::new);
Pero expliquemos las cosas más, primero, creemos una lista de cadenas llenas de tres valores:
String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};
Cree una secuencia a partir de la matriz dada:
Stream<String> stringStream = Arrays.stream(stringList);
ahora podemos realizar algunas operaciones en esta secuencia Ex:
Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());
y finalmente conviértalo en una matriz java 8 usando estos métodos:
1-Método clásico (interfaz funcional)
IntFunction<String[]> intFunction = new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
return new String[value];
}
};
String[] myNewArray = myNewStream.toArray(intFunction);
2 -Expresión Lambda
String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);
3- Referencia de método
String[] myNewArray3 = myNewStream.toArray(String[]::new);
Referencia del método Explicación:
Es otra forma de escribir una expresión lambda que es estrictamente equivalente a la otra.
Convierta texto en una matriz de cadenas donde separe cada valor por comas y recorte cada campo, por ejemplo:
String[] stringArray = Arrays.stream(line.split(",")).map(String::trim).toArray(String[]::new);
Puede crear un recopilador personalizado que convierta una secuencia en una matriz.
public static <T> Collector<T, ?, T[]> toArray( IntFunction<T[]> converter )
{
return Collectors.collectingAndThen(
Collectors.toList(),
list ->list.toArray( converter.apply( list.size() ) ) );
}
y un uso rápido
List<String> input = Arrays.asList( ..... );
String[] result = input.stream().
.collect( CustomCollectors.**toArray**( String[]::new ) );
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 la matriz devuelta no es importante, simplemente usar el toArray()
método es más fácil y más corto. Por ejemplo:
Stream<Object> args = Stream.of(BigDecimal.ONE, "Two", 3);
System.out.printf("%s, %s, %s!", args.toArray());
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
int[] arr= stream.mapToInt(x->x.intValue()).toArray();
import java.util.List;
import java.util.stream.Stream;
class Main {
public static void main(String[] args) {
// Create a stream of strings from list of strings
Stream<String> myStreamOfStrings = List.of("lala", "foo", "bar").stream();
// Convert stream to array by using toArray method
String[] myArrayOfStrings = myStreamOfStrings.toArray(String[]::new);
// Print results
for (String string : myArrayOfStrings) {
System.out.println(string);
}
}
}
Pruébelo en línea: https://repl.it/@SmaMa/Stream-to-array
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Las mujeres del Reino Unido acuden a las urnas para las elecciones especiales de hoy en un aniversario particularmente apropiado. Han pasado 104 años desde que Emily Wilding Davison murió por la causa del sufragio femenino, pisoteada hasta la muerte en medio de una carrera de caballos de alto perfil, frente al Rey y la Reina.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.