【发布时间】:2017-10-30 09:50:18
【问题描述】:
假设我有一个List[(Int, String)] 类型的键值对列表和一组Set[Int] 类型的键。我正在编写一个函数来返回一个映射Map[Int, String],它包含给定集合中的所有键,并且只包含那些键。如果对不包含所有键或包含重复键,则返回错误。
为简单起见,我在这里返回Option:Some 表示成功,None 表示失败。
def foo(pairs: List[(Int, String)], keys: Set[Int]): Option[Map[Int, String]] = {
val m = pairs.groupBy(_._1).filterKeys(keys)
if (m.keys != keys || m.exists(_._2.size != 1)) None else Some(m.mapValues(_.head._2))
}
上面的代码可能有效,但看起来很笨拙。你会如何改进它?
【问题讨论】:
标签: scala collections