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

时间:2015-11-11 18:03:41

标签: java java-stream

你可以向我解释一下吗? 为什么

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

是不同的?

1 个答案:

答案 0 :(得分:9)

Stream没有Stream.of(Collection)方法。它有一个方法

static <T> Stream<T> of(T t)

如果您将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));

第一个版本打印:

1
2
3
4
5
6

第二个版本打印:

[1, 2, 3]
[4, 5, 6]

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

static <T> Stream<T> of(T... values)