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的论点需要澄清。
发布于 2022-02-23 16:40:49
首先,在第一行中有一个错误,其中Stream.of被分配给List<Integer>
关于flatMap论点的解释:
将来自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]https://stackoverflow.com/questions/71239938
复制相似问题