Categorías
Java Java 8 Stream

Concat Streams en Java 8

A menudo, es posible que deba realizar una concatenación o fusionar dos flujos. En la clase Stream, hay un método estático concat () que se puede usar para este propósito.

Fusionar dos corrientes

String[] arr1 = { "a", "b", "c", "d" };
String[] arr2 = { "e", "f", "g" };
Stream<String> stream1 = Stream.of(arr1);
Stream<String> stream2 = Stream.of(arr2);
 
Stream<String> stream3 = Stream.concat(stream1, stream2);
String[] arr = stream3.toArray(String[]::new);
System.out.println(Arrays.toString(arr));

Producción:

[a, b, c, d, e, f, g]

Fusionar una secuencia filtrada con otra

Si necesita filtrar una secuencia antes de realizar la concatenación con otra secuencia:

String[] arr1 = { "abc", "bcd", "cdef", "defgh" };
String[] arr2 = { "af", "fg", "gh" };
Stream<String> stream1 = Stream.of(arr1);
Stream<String> stream2 = Stream.of(arr2);
 
Stream<String> stream3 = Stream.concat(stream1.filter(x -> x.length()<4), stream2);
String[] arr = stream3.toArray(String[]::new);
System.out.println(Arrays.toString(arr));

Producción:

[abc, bcd, af, fg, gh]

Fusión de más de 2 corrientes

String[] arr1 = { "a", "b", "c", "d" };
String[] arr2 = { "e", "f", "g" };
String[] arr3 = { "h", "i", "j" };
Stream<String> stream1 = Stream.of(arr1);
Stream<String> stream2 = Stream.of(arr2);
Stream<String> stream3 = Stream.of(arr3);
 
Stream<String> stream = Stream.concat(Stream.concat(stream1, stream2), stream3);
String[] arr = stream.toArray(String[]::new);
System.out.println(Arrays.toString(arr));
  Recuperar una lista de una secuencia en Java 8

Producción:

[a, b, c, d, e, f, g, h, i, j]

Tenga en cuenta que los elementos devueltos por el método Stream.concat () están ordenados. Por ejemplo, las siguientes dos líneas devuelven el mismo resultado:

Stream.concat(Stream.concat(stream1, stream2), stream3);
Stream.concat(stream1, Stream.concat(stream2, stream3));

Pero el resultado de los dos siguientes es diferente.

Stream.concat(Stream.concat(stream1, stream2), stream3); //[a, b, c, d, e, f, g, h, i, j]
Stream.concat(Stream.concat(stream2, stream1), stream3); //[e, f, g, a, b, c, d, h, i, j]

Utilice Stream.of (…). FlatMap () para fusionar

Para que el código sea más legible, también puede usar el método Stream.of () para fusionar más de dos flujos.

String[] arr1 = { "a", "b", "c", "d" };
String[] arr2 = { "e", "f", "g" };
String[] arr3 = { "h", "i", "j" };
Stream<String> stream1 = Stream.of(arr1);
Stream<String> stream2 = Stream.of(arr2);
Stream<String> stream3 = Stream.of(arr3);
 
//use Stream.of(T... values)
Stream<String> stream = Stream.of(stream1, stream2, stream3).flatMap(x -> x);
 
String[] arr = stream.toArray(String[]::new);
System.out.println(Arrays.toString(arr));

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *