使用Java Lambda创建两个(或更多)列表的笛卡尔乘积集合[英] Create collection of cartesian product of two (and more) lists with 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());

本文地址:https://www.itbaoku.cn/post/978588.html