在 Scala 中从对象列表创建 HashMap 而无需循环
Posted
技术标签:
【中文标题】在 Scala 中从对象列表创建 HashMap 而无需循环【英文标题】:Create a HashMap in Scala from a list of objects without looping 【发布时间】:2011-12-18 10:18:48 【问题描述】:我有一个对象列表,每个对象都有两个感兴趣的字段,我将它们称为“键”和“值”。由此我需要构建一个由“键”映射到“值”的条目组成的 HashMap。
我知道这可以通过遍历列表并为列表中的每个项目调用hmap.put(obj.key, obj.value)
来完成。但不知何故,它可以在一行简单的代码中使用map
或flatMap
或Scala 的List 操作的其他组合以及其中的函数构造来完成。我“闻”对了吗,怎么做?
【问题讨论】:
【参考方案1】:list.map(i => i.key -> i.value).toMap
【讨论】:
OP 想要HashMap
而不是 Map
警告:不支持重复键!【参考方案2】:
还有:
Map(list map (i => i.key -> i.value): _*)
【讨论】:
我想这样做的好处是你可以指定你需要的Map的类型,所以它是更通用的模式 @LuigiPlinge 这是真的。我更喜欢使用.toMap
,因为它更具可读性。如果性能非常重要,也许使用breakOut
。
我迷失了最后一部分:_* 我知道下划线是函数变量的占位符,但我看不出它如何适合该表达式,也看不出它的作用该上下文中的星号和冒号。
好的,我现在知道了。 Map.apply 与可变参数。
注意:不支持重复键!【参考方案3】:
从集合创建(记住不要有 new
关键字)
val result: HashMap[Int, Int] = HashMap(myCollection: _*)
【讨论】:
以上是关于在 Scala 中从对象列表创建 HashMap 而无需循环的主要内容,如果未能解决你的问题,请参考以下文章
如何从scala对象中的sbt ProjectPlugin.scala加载对象
在 Java(或 Scala)中迭代 HashMap 的 HashMap