在List [(String,Int)]上应用过滤器时,过滤器函数需要什么签名?

时间:2017-02-03 09:04:10

标签: scala

这不会编译

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

我做错了什么?

3 个答案:

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