这不会编译
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
我做错了什么?
答案 0 :(得分:2)
预期的类型为Tuple2[String, Int]
Tuple2。
要在第二个参数上完成过滤,您有两个选项:
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)
答案 1 :(得分:2)
您的列表属于List[(String, Int)]
类型。类型(String, Int)
是一对(Tuple2
)。这对是filter-function中的参数。
你可以用两种方式写它。第一种方式是:
list.filter(pair => pair._2 % 2 == 0)
您也可以在对上使用模式匹配。这会让你更接近你想要的东西:
list.filter { case (i, j) => j % 2 == 0 }
答案 2 :(得分:0)
a是Tuple2的列表:
val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
a.filter(t => t._2 % 2 == 0)