在 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) 来完成。但不知何故,它可以在一行简单的代码中使用mapflatMap 或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加载对象

在 Kotlin 中从 Spring 配置创建列表映射

在 Java(或 Scala)中迭代 HashMap 的 HashMap

创建一个scala对象并获 取该对象的名称

如何在 JSP 页面中从 Java 类中设置 hashmap 的值以便在控制器中进一步使用

在 ApEx 中从数据库集合对象创建 LOV