如何以更多功能方式拆分和处理Scala中的数组数据

时间:2014-04-03 07:45:11

标签: scala functional-programming

我的逻辑很简单。我有以下文本行并将它们转换为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的方式实施?

1 个答案:

答案 0 :(得分:1)

首先,请勿使用foreachforeach是邪恶的。请改用map

其次,不要使用varval在大多数情况下都可以。

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

考虑到这一点,以下是它可以转换为:

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