从列表中使用scala从地图中获取某些密钥

时间:2018-06-29 08:49:26

标签: scala

例如:

data = ConcurrentHashMap(
    "allen"->{"name"->"allen","score"->"1"},
    "bill"->{"name"->"bill","score"->"2"},
    "tim"->{"name"->"tim","score"->"5"})

我想获得类似result = List("1","2","5")的结果
如何通过扁平化平面图之类的Scala转换来解决此问题?

2 个答案:

答案 0 :(得分:0)

假设您输入的格式为

val data: Map[String, Map[String, String]] = Map(
  "allen"-> Map("name"->"allen","score"->"1"),
  "bill"->Map("name"->"bill","score"->"2"),
  "tim"->Map("name"->"tim","score"->"5"))

现在要获取结果,您可以对输入内容执行以下操作

data.collect{
  case (k,v) => v.collect{
    case (k1,v1) if v1.map(Character.isDigit(_)).reduce(_&&_) => v1.toInt
  }
}.flatten

您将获得以下格式的输出

res0: scala.collection.immutable.Iterable[Int] = List(1, 2, 5)

此外,如果您想要与球员得分相对应的值,则可以使用

data.collect{
  case (k,v) => v.collect{
    case (k1,v1) if k1.equalsIgnoreCase("score") => v1.toInt
  }
}.flatten

在这种情况下,您将得到的输出为

res0: scala.collection.immutable.Iterable[Int] = List(1, 2, 5)

请让我知道是否能回答您的问题。

答案 1 :(得分:0)

我通过以下方法解决了自己的问题:
val result = data.map(_._2.score)