使用Java Lambda创建两个(或更多)列表的笛卡尔积的集合
我可以通过以下方法轻松地在Scala中实现此目标:
def permute(xs: List[Int], ys: List[Int]) = { for {x <- xs; y <- ys} yield (x,y)
}
因此,如果我给它{1,2},{3,4},我将返回{1,3},{1,4},{2,3},{2,4}
我希望能够使用流将其转换为java 8。
我有点困难,我希望能够进一步扩展,因为我希望能够从两个以上的列表中生成许多排列的测试样本。
即使使用流,是否也会不可避免地成为一团糟呢?还是我不够用自己?
在意识到我正在寻找笛卡尔积之后,发现了一些其他答案:
如何使用Java 8流制作笛卡尔产品?
回答:
我有困难,搞清楚你希望是什么,它 看起来 就像你正在试图获得笛卡尔积?就像,给定{1, 2}
和{3, 4}
,您期望{(1, 3), (1,4), (2, 3), (2,4)}
什么?(就其价值而言,我认为这与排列的数学定义没有任何关系,排列的数学定义通常涉及对单个列表的内容进行排序的不同方式。)
那可以写
xs.stream() .flatMap(x -> ys.stream().map(y -> Pair.of(x, y)))
.collect(toList());
以上是 使用Java Lambda创建两个(或更多)列表的笛卡尔积的集合 的全部内容, 来源链接: utcz.com/qa/425509.html