【发布时间】:2017-05-22 13:24:42
【问题描述】:
如何使用 Java 8 实现一个函数以获取一些流,并生成一个流,其中每个元素都是一个列表,由流的笛卡尔积的一个成员组成?
我查看了this question——该问题使用了一个BinaryOperator 的聚合器(获取两个相同类型的项目并生成一个相同类型的项目)。我希望最终结果中的项目是Lists,而不是输入流中元素的类型。
具体来说,假设我想要的函数叫做product,如下:
Stream<List<String>> result =
product(
Stream.of("A", "B", "C", "D"),
Stream.of("I", "J", "K"),
Stream.of("Y", "Z")
);
result.forEach(System.out::println);
应该打印:
[A, I, Y]
[A, I, Z]
[A, J, Y]
[A, J, Z]
[A, K, Y]
[A, K, Z]
[B, I, Y]
...
[D, K, Y]
[D, K, Z]
理想情况下,我希望此操作尽可能懒惰。例如,如果输入流是由Stream.generate() 生成的,那么如果这些流的提供者在绝对需要时才执行,那就太好了。
【问题讨论】:
标签: java java-8 java-stream cartesian-product