如何绕过&在Scala中产生一定的函数?

时间:2017-02-15 14:24:43

标签: scala syntax

我编写了以下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天前。

2 个答案:

答案 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)

或者,与其他建议一样,您可以使用collectmap组合的filter。您还可以对案例类进行结构化以直接访问out

def filterTest5: (Int, List[A]) => List[List[Int]] = (x, a) => a.collect {
  case A(_, out) if isIn(x)(out) => out
}