Java8:Concat流

您可能经常需要合并或合并两个流。在Stream类中,有一个静态方法concat()可用于此目的。

合并两个流

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));

输出:

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

将过滤后的流合并到另一个
如果需要在过渡到另一个流之前先过滤一个流,请执行以下操作:

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));

输出:

[abc,bcd,af,fg,gh]

合并超过2个流

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));

输出:

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

请注意,由Stream.concat()方法返回的元素是有序的。例如,以下两行返回相同的结果:

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

但是以下两个结果是不同的。

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]

使用Stream.of(…)。flatMap()进行合并

为了使代码更具可读性,您还可以使用Stream.of()方法合并两个以上的流。

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));

在这里插入图片描述

发布了17 篇原创文章 · 获赞 0 · 访问量 188

猜你喜欢

转载自blog.csdn.net/qq_41806546/article/details/105120679