所以说我有一些像这样的清单
val l = List((1, "blue"), (5, "red"), (2, "green"))
Run Code Online (Sandbox Code Playgroud)
然后我想过滤其中一个,我可以做类似的事情
val m = l.filter(item => {
val (n, s) = item // "unpack" the tuple here
n != 2
}
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以直接将元组"解包"作为lambda的参数,而不是拥有这个中间item变量?
像下面这样的东西是理想的,但是eclipse告诉我 wrong number of parameters; expected=1
val m = l.filter( (n, s) => n != 2 )
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激 - 使用2.9.0.1
Kip*_*ros 80
这是你能得到的最接近的:
val m = l.filter { case (n, s) => n != 2 }
Run Code Online (Sandbox Code Playgroud)
它基本上是匿名PartialFunction中的模式匹配语法.对象和特征中也有tupled方法Function,但它们只是这个模式匹配表达式的包装器.
Ami*_*far 19
嗯,虽然基普顿有一个很好的答案.你可以通过这样做来缩短它.
val l = List((1, "blue"), (5, "red"), (2, "green"))
val m = l.filter(_._1 != 2)
Run Code Online (Sandbox Code Playgroud)
有很多选择:
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
Run Code Online (Sandbox Code Playgroud)
val m = l.filter( (n, s) => n != 2 )
Run Code Online (Sandbox Code Playgroud)
...是一种类型不匹配,因为lambda定义了一个
Function2[String,Int,Boolean] 用两个参数代替Function1[(String,Int),Boolean]以one Tuple2[String,Int]为参数.您可以像这样在它们之间进行转换:
val m = l.filter( ((n, s) => n != 2).tupled )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12884 次 |
| 最近记录: |