运维开发网

在Scala中,如何通过一对键值找到CSV中的elemein?

运维开发网 https://www.qedev.com 2020-07-08 20:19 出处:网络 作者:运维开发网整理
例如,从以下文件: Name,Surname,E-mail John,Smith,[email protected] Nancy,Smith,[email protected] Jane,Doe,[email protected] John,Doe,[email protected] 我如何获得John Doe的电子邮件地址? 我现在使用以下代码,但现在只能指定一个关键字段:
例如,从以下文件:

Name,Surname,E-mail
John,Smith,[email protected]
Nancy,Smith,[email protected]
Jane,Doe,[email protected]
John,Doe,[email protected]

我如何获得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
_ + _

也就是说,第一个下划线表示第一个参数,第二个下划线表示第二个参数,依此类推.这就是你所看到的错误的原因 – 你使用了两个下划线,但只有一个参数.修复是使用显式版本:

iter.find( a=> a(0) == "John" && a(1) == "Doe" )

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号