List<Integer> s1 = Stream.of(1, 2);
Supplier<Stream<String>> s2 = ()->Stream.of("A", "B");
s1.flatMap(v1 -> s2.get()
.map(v2 ->tuple(v1,v2))).forEach(System.out::println);
Flatmap 参数需要澄清。
首先,第一行有一个拼写错误,其中
Stream.of
被分配给 List<Integer>
关于
flatMap
论证的解释:
来自
s1
流的每个整数都被映射到包含多个项目的 Stream<tuple>
:对于每个整数,从 Stream<String>
中选取一个字符串
因此,这些多个
Stream<tuple>
应该被展平成单个Stream<tuple>
,然后在forEach
终端操作中被消耗
List<Integer> s1 = Stream.of(1, 2);
Supplier<Stream<String>> s2 = () -> Stream.of("A", "B");
s1 // Stream<Integer>
.flatMap(v1 -> s2.get() // Stream<String> returned by the Supplier
.map(v2 -> tuple(v1,v2)) // Stream<tuple>
) // Stream<tuple>
.forEach(System.out::println);
为了便于说明,我们假设仅使用
map
代替 flatMap
(也使用 List
代替 tuple
):
s1 // Stream<Integer>
.map(v1 -> s2.get() // Stream<String> returned by the Supplier
.map(v2 -> Arrays.asList(v1, v2)) // Stream<List>
) // Stream<Stream<List>>
.peek(System.out::println)
.flatMap(s -> s) Stream<List>
.forEach(System.out::println);
输出:
java.util.stream.ReferencePipeline$3@3dd4520b // printed by peek
[1, A]
[1, B]
java.util.stream.ReferencePipeline$3@5ae63ade // printed by peek
[2, A]
[2, B]