# 斯卡拉 – 一个lambda参数可以匹配一个元组？

``val l = List((1, "blue"), (5, "red"), (2, "green"))` `

` `val m = l.filter(item => { val (n, s) = item // "unpack" the tuple here n != 2 }` `

` `val m = l.filter( (n, s) => n != 2 )` `

### 5 Solutions collect form web for “斯卡拉 – 一个lambda参数可以匹配一个元组？”

` ` val m = l.filter { case (n, s) => n != 2 }` `

` `val l = List((1, "blue"), (5, "red"), (2, "green")) val m = l.filter(_._1 != 2)` `

` `for (x <- l; (n,s) = x if (n != 2)) yield x l.collect{ case x @ (n,s) if (n != 2) => x } l.filter{ case (n,s) => n != 2 } l.unzip.zipped.map((n,s) => n != 2).zip // Complains that zip is deprecated` `
` `val m = l.filter( (n, s) => n != 2 )` `

…是一种types不匹配，因为lambda定义了一个

• `Function2[String,Int,Boolean]`用两个参数代替
• `Function1[(String,Int),Boolean]`以一个`Tuple2[String,Int]`作为参数。

` `val m = l.filter( ((n, s) => n != 2).tupled )` `

` `object unTuple { def apply[A, B, X](f: (A, B) => X): (Tuple2[A, B] => X) = { (t: Tuple2[A, B]) => f(t._1, t._2) } def apply[A, B, C, X](f: (A, B, C) => X): (Tuple3[A, B, C] => X) = { (t: Tuple3[A, B, C]) => f(t._1, t._2, t._3) } //... } val list = List( ("a",1), ("b",2) ) val list2 = List( ("a",1,true), ("b",2,false) ) list foreach unTuple( (k: String, v: Int) => println(k, v) ) list2 foreach unTuple( (k: String, v: Int, b: Boolean) => println(k, v, b) )` `

` `(a,1) (b,2) (a,1,true) (b,2,false)` `

` `val m = l.filter( unTuple( (n:Int,color:String) => n != 2 ))` `
• 将Java集合转换为Scala集合
• 三元运算符类似于？：
• 在sbt 0.13中使用.sbt文件编写多项目编译的习惯方法
• Scala：为什么mapValues产生一个视图，是否有任何稳定的select？
• 如何将scala.List转换为java.util.List？
• 将元素添加到列表中在Scala中
• 斯卡拉给我“非法开始定义”
• 获取选项值或抛出exception
• Scala探查器？
• 澄清需要关于Scala的期货和承诺