按键对地图进行过滤和排序的最佳方法

亚历山德拉·西连科(Alexandra Sirenko)

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章