Java 8. collection.stream()和Stream.of(集合)之间的区别

Ale*_*nov 7 java java-stream

你能解释一下吗?为什么

Stream.of(l1, l2).flatMap((x)->x.stream()).forEach((x)->System.out.println(x));
Run Code Online (Sandbox Code Playgroud)

Stream.of(l1, l2).flatMap((x)->Stream.of(x)).forEach((x)->System.out.println(x));
Run Code Online (Sandbox Code Playgroud)

是不同的?

Pau*_*ton 9

Stream没有Stream.of(Collection)方法.它确实有一种方法

static <T> Stream<T> of(T t)
Run Code Online (Sandbox Code Playgroud)

如果你传递Collection给这个方法,你将得到一个Stream<Collection>包含一个元素(Collection),而不是集合元素的流.

举个例子,试试这个:

List<Integer> l1 = Arrays.asList(1, 2, 3);
List<Integer> l2 = Arrays.asList(4, 5, 6);
Stream.of(l1, l2).flatMap((x)->x.stream()).forEach((x)->System.out.println(x));
Stream.of(l1, l2).flatMap((x)->Stream.of(x)).forEach((x)->System.out.println(x));
Run Code Online (Sandbox Code Playgroud)

第一个版本打印:

1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)

第二个版本打印:

[1, 2, 3]
[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

请注意,如果arrObject[]可以Stream.of(arr)来获取数组元素的流.这是因为还有另一个版本of使用varargs.

static <T> Stream<T> of(T... values)
Run Code Online (Sandbox Code Playgroud)