我试图将scala hashmap的键与值列表进行比较,如果该键不在列表中,我需要将该Map的值更新为默认值-1。
例如:考虑以下情况:
列表:
val pos = List("100","110")
Map:
scala> idSizeMap
res2: scala.collection.immutable.Map[String,Long] = Map(100 -> 4240070722, 110 -> 611884363, 120 -> 1825405636, 130 -> 2194234, 72 -> 3685020648)
使用filterkeys我可以做一个类似于交叉口的操作
scala> val result = idSizeMap.filterKeys(pos.contains)
result: scala.collection.immutable.Map[String,Long] = Map(100 -> 4240070722, 110 -> 611884363)
但是我也希望旧Map中的键具有默认值-1。预期产量:
Map(100 -> 4240070722, 110 -> 611884363, 120 -> -1, 130, -1, 72 -> -1)
我还尝试了以下操作,其操作与filterkeys相同:
var similarItems = Map[String, Long]()
similarItems: scala.collection.immutable.Map[String,Long] = Map()
scala> for (eachpos <- pos) {
| if (!eidSizeMap.contains(eachpos)) similarItems += (eachpos -> -1)
| else
| similarItems += (eachpos -> eidSizeMap(eachpos))
| }
scala> similarItems
res8: scala.collection.immutable.Map[String,Long] = Map(100 -> 4240070722, 110 -> 611884363)
什么是最合适的scala方式来实现这一点?
2条答案
按热度按时间1tuwyuhd1#
考虑
transform
```idSizeMap.transform((k, v) => if (pos.contains(k)) v else -1)
fv2wmkja2#
你可以
map
如果密钥不在pos
将该值替换为默认值: