例如:
data = ConcurrentHashMap(
"allen"->{"name"->"allen","score"->"1"},
"bill"->{"name"->"bill","score"->"2"},
"tim"->{"name"->"tim","score"->"5"})
我想获得类似result = List("1","2","5")
的结果
如何通过扁平化平面图之类的Scala转换来解决此问题?
答案 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)