我编写了以下Scala代码:
case class A(x: Int, out: List[Int])
def isIn: Int => List[Int] => Boolean =
x => l => l.filter { _ == x }.nonEmpty
def filterTest4: (Int, List[A]) => List[List[Int]] = (x, a) =>
for (l <- a; if (isIn(x)(l.out))) yield l.out
functrion filterTest4工作得很好,但是使用了for&amp;屈服,我不喜欢,因此希望看到另一种方式。如果有人提出建设性意见/答案,我会很高兴。请保持谨慎,请记住我刚开始在Scala写作3天前。
答案 0 :(得分:1)
我刚刚找到了map函数,可以像这样使用:
def filterTest5: (Int, List[A]) => List[List[Int]] = (x, a) =>
a.filter { a2 => isIn(x)(a2.out) }.map { a2 => a2.out }
我认为这样做。
答案 1 :(得分:1)
或者,与其他建议一样,您可以使用collect
和map
组合的filter
。您还可以对案例类进行结构化以直接访问out
。
def filterTest5: (Int, List[A]) => List[List[Int]] = (x, a) => a.collect {
case A(_, out) if isIn(x)(out) => out
}