这不会编译
object TestFilter extends App {
val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
filter( (i:String,j:Int) => j % 2 == 0)
}
我收到以下错误:
Error:(6, 30) type mismatch;
found : (String, Int) => Boolean
required: ((String, Int)) => Boolean
我做错了什么?
您的列表类型为 List[(String, Int)]
。(String, Int)
的类型是一对(Tuple2
)。此对是过滤器函数中的参数。
您可以通过两种方式编写它。第一种方式是这样的:
list.filter(pair => pair._2 % 2 == 0)
您还可以对货币对使用模式匹配。这将使您更接近您想要的:
list.filter { case (i, j) => j % 2 == 0 }
预期的类型是 Tuple2[String, Int]
Tuple2。为了完成对第二个参数的过滤,您有 2 个选项:
val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
a.filter{case (i,j) => j % 2 == 0}
或
val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
a.filter(_._2 % 2 == 0)
a 是 Tuple2 的列表:
val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
a.filter(t => t._2 % 2 == 0)