从Scala中的地图返回选项的干净/惯用/简洁方法

时间:2014-09-25 00:41:38

标签: scala

在下面的代码中是否有内联方式返回第一个值或None?对期权的处理似乎比预期的更加冗长。

def findBySqlName(sqlName : String) = {
  map.iterator.find{ case (cname, col) =>
    col.sqlName == sqlName
  }.someThingInlineHereThatReturnsTheFirstValueOrNoneIfEmpty
}

2 个答案:

答案 0 :(得分:3)

只是map.find?

val map = Map(1 -> "a", 2 -> "b")

def findByValue(v: String) = map.find(_._2 == v)

println(findByValue("a"))
println(findByValue("c"))

在你的情况下获得价值:

def findBySqlName(sqlName : String) = {
  map.iterator.find{ case (cname, col) =>
    col.sqlName == sqlName
  }.map(_._2)
}

答案 1 :(得分:1)

我知道您已经接受了答案,但您可以使用collectFirst一步完成findmap

def findBySqlName(sqlName : String) = {
  map.collectFirst({ case (cname, col) if (col.sqlName == sqlName) => col._2 })
}