我的逻辑很简单。我有以下文本行并将它们转换为Map:
a-1.0
b-text
c-
d-
e-2.0
请注意,该值可能为null
。这是我在Scala中的方法:
var valueMap = scala.collection.mutable.Map[String,String]()
Source.fromFile("file/text").getLines().foreach(l=>{
var temp = l.split("-")
if(temp.size.equals(2)){
valueMap += (temp(0)->temp(1))
}else{
valueMap += (temp(0)->"")
}
})
它有效,但它更像Java
方式而不是Scala
方式。
任何人都可以帮助我以更实用或更Scala
的方式实施?
答案 0 :(得分:1)
首先,请勿使用foreach
。 foreach
是邪恶的。请改用map
。
其次,不要使用var
。 val
在大多数情况下都可以。
第三,如果可以的话,不要使用可变结构。
考虑到这一点,以下是它可以转换为:
val valueMap = Source.fromFile("file/text").getLines().map(line => {
line.split("-") match {
case Array(k, v) => (k, v)
case Array(k) => (k, "")
}
}).toMap