使用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

回到顶部