如何在scala.collection.mutable.HashMap中使用getOrElseUpdate?

时间:2016-06-07 13:57:03

标签: scala dictionary hashmap

示例代码计算给定输入文件中每个单词的出现位置:

object Main {
  def main(args: Array[String]) {
    val counts = new scala.collection.mutable.HashMap[String, Int]
    val in = new Scanner(new File("input.txt"))

    while (in.hasNext()) {
      val s: String = in.next()
      counts(s) = counts.getOrElse(s, 0) + 1 // Here!
    }

    print(counts)
  }
}

可以使用getOrElseUpdate方法重写带注释行的高亮显示吗?

P.S。我只是在#34;斯卡拉的第四部分,因为不耐烦的#34;所以请不要告诉我关于功能性Scala的信息,我相信在这里可以更加美丽。

感谢。

1 个答案:

答案 0 :(得分:0)

如果你看doc,你会看到下一个:

  

如果给定的密钥已在此地图中,将返回关联的值。   否则,计算来自给定表达式op的值,使用key存储   映射并返回该值。

,但无论如何你需要修改地图,所以getOrElseUpdate在这里没用。

您可以定义default值,如果不存在,则会返回该值。并在下一个方式使用它:

import scala.collection.mutable.HashMap
object Main {
  def main(args: Array[String]) {
    val counts = HashMap[String, Int]().withDefaultValue(0)
    val in = new Scanner(new File("input.txt"))

    while (in.hasNext()) {
      val s: String = in.next()
      counts(s) += 1
    }

    print(counts)
  }
}