在Scala中使用函数式风格查找与谓词匹配的两个集合的所有对



我目前正在学习Scala,我正在寻找充分利用函数式编程风格的好方法。

我正在尝试做以下事情:

给定两个集合,我想列出与谓词匹配的两个条目的每一个可能组合。

现在我可以使用两个循环来解决它,并将每个结果保存在一个新的集合中,但有更优雅的scala-ey解决方案吗?

您可以从开始

val col1: List[Int]
val col2: List[Int]
col1.map { i =>
col2.map { j =>
(i -> j)
}.filter { case (i, j) =>
// condition
}
}.flatten

CCD_ 1和CCD_。玩一点看类型的想法。

然后您可以尝试用flatMap(f):替换map(f).flatten

col1.flatMap { i =>
col2.map { j =>
(i -> j)
}.filter { case (i, j) =>
// condition
}
}

这几乎与理解完全相同:

for {
i <- col1
j <- col2
ij = (i, j)
if condition(ij)
} yield ij

它可能更容易作为读取

for {
i <- col1
j <- col2
if condition(i, j)
} yield (i, j)

https://scalafiddle.io/sf/mhFZMjt/0

最新更新