如何更有效地分割和处理Scala中的数组数据

如何更有效地分割和处理Scala中的数组数据,scala,functional-programming,Scala,Functional Programming,我的逻辑很简单。我有以下文本行并将其转换为地图: 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.eq

我的逻辑很简单。我有以下文本行并将其转换为地图:

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
way,而不是
Scala
way


任何人都可以帮助我以更具功能性或更具
Scala
的方式实现吗

首先,不要为此使用
foreach
<代码>foreach是邪恶的。改用
map

其次,不要使用
var
s
val
s在大多数情况下都正常

第三,如果可以,不要使用可变结构

考虑到这一点,可以将其转换为:

val valueMap = Source.fromFile("file/text").getLines().map(line => {
  line.split("-") match {
    case Array(k, v) => (k, v)
    case Array(k) => (k, "")
  }
}).toMap

我是Scala的新手。为什么
foreach
是邪恶的?我想
foreach
只是给我一个直觉,它在迭代。在这种情况下,
map
为你做了繁重的工作
map
类似于
foreach
——它迭代一个集合,并将给定的函数应用于每个元素。不同之处在于,
foreach
不会产生任何有意义的结果(即返回
Unit
),而
map
会返回由您传递的函数定义的新集合<代码>列表(1,2,3).map(u+1)返回一个新列表,其中所有元素的增量为1-
列表(2,3,4)