java - 使用 Java Lambda 创建两个(或更多)列表的笛卡尔积集合

标签 java scala lambda for-comprehension

我可以在 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。

我遇到了一些困难,我希望能够将其扩展得更远,因为我希望能够从两个以上的列表中生成许多排列的测试样本。

即使使用流也不可避免地会出现嵌套困惑,还是我不够努力?

在意识到我正在寻找笛卡尔积后,找到了一些额外的答案:

How can I make Cartesian product with Java 8 streams?

最佳答案

我很难弄清楚您希望得到什么,看起来您正试图获得笛卡尔积?比如,给定 {1, 2}{3, 4},您期望 {(1, 3), (1, 4), ( 2, 3), (2, 4)}? (就其值(value)而言,我认为这与排列的数学定义没有任何关系,排列通常涉及对单个列表的内容进行排序的不同方式。)

可以这么写

xs.stream()
  .flatMap(x -> ys.stream().map(y -> Pair.of(x, y)))
  .collect(toList());

关于java - 使用 Java Lambda 创建两个(或更多)列表的笛卡尔积集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752575/

相关文章:

java - Apache POI HWPF,替换 .doc 文档中的文本失败

java - 用 Java 实现我自己的树迭代器

java - 如何使用自定义非托管扩展针对 Neo4j 运行测试?

c# - C# 编译器或 JIT 能否优化掉 lambda 表达式中的方法调用?

sql - 如何翻译为 Linq 表达式

java - 有没有办法比较 lambda 表达式?

java - 从文件读取 double 时输入不匹配

scala - 从 Scala 枚举中获取值

scala - 将 OOP "decorator"重构为释放 monad 结构

sql-server - Spark - jdbc 写入在 Yarn 集群模式下失败但在 spark-shell 中工作