例如,从以下文件:
Name,Surname,E-mail John,Smith,john.smith@hotmail.com Nancy,Smith,nancy.smith@gmail.com Jane,Doe,jane.doe@aol.com John,Doe,john.doe@yahoo.com
我如何获得John Doe的电子邮件地址?
我现在使用以下代码,但现在只能指定一个关键字段:
val src = Source.fromFile(file)
val iter = src.getLines().drop(1).map(_.split(","))
var quote = ""
iter.find( _(1) == "Doe" ) foreach (a => println(a(2)))
src.close()
我试过写"iter.find(_(0)=="John"&& _(1)=="Doe")",但这会引发一个错误,说只有一个参数是预期的(将条件包含在额外的中)一对括号没有帮助).
作为lambda参数的占位符的下划线不能像您想象的那样工作.
a => println(a)
// is equivalent to
println(_)
(a,b) => a + b
// is equivalent to
_ + _
a => a + a
// is not equivalent to
_ + _
Run Code Online (Sandbox Code Playgroud)
也就是说,第一个下划线表示第一个参数,第二个下划线表示第二个参数,依此类推.这就是你所看到的错误的原因 - 你使用了两个下划线,但只有一个参数.修复是使用显式版本:
iter.find( a=> a(0) == "John" && a(1) == "Doe" )
Run Code Online (Sandbox Code Playgroud)