我有一个Map实例(不可变):
val source = Map(
("foo", "spam"),
("bar", "hoge"),
("baz", "eggs"),
("qux", "corge"),
("quux", "grault")
)
并且我按某种顺序有一些键(“设置”或“列表”),这些键在源映射中可能存在也可能不存在:
baz
foo
quuuuux // does not exist in a source map
但是,用简洁的Scala样式遍历源地图,用我的键对其进行过滤并将已过滤的项目按与键相同的顺序放入生成的地图中的最佳,最简洁的方法是什么?
Map(baz -> eggs, foo -> spam)
PS要澄清-生成的映射中的键顺序必须与过滤键列表中的键顺序相同
val keys = List("foo", "bar")
val map = Map("foo" -> "spam", "bar" -> "hoge", "baz" -> "eggs")
keys.foldLeft(ListMap.empty[String, String]){ (acc, k) =>
map.get(k) match {
case Some(v) => acc + (k -> v)
case None => acc
}
}
这将迭代键,从而构建仅包含匹配键的映射。
请注意ListMap
,尽管的实现ListMap
将以插入时的相反顺序返回元素,但仍需要保留键的顺序(因为键位于列表的开头)
LinkedHashMap
可以确保确切的插入顺序,但这是可变的数据结构。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句