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));
是不同的?
答案 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]
请注意,如果arr
是Object[]
,则可以执行Stream.of(arr)
以获取数组元素的流。这是因为还有另一个使用varargs的of
版本。
static <T> Stream<T> of(T... values)