2011-10-31 58 views
9

我有对象的名单,有两个感兴趣的领域的每个对象,我会打电话给“关键”和“价值”创建从对象列表Scala中的一个HashMap中。从那我需要建立一个HashMap,由“key”映射到“value”的条目组成。没有循环

我知道它可以通过列表循环,并呼吁hmap.put(obj.key, obj.value)对列表中的每个项目来完成。但不知何故,“闻香”这样可以在使用mapflatMap或Scala的列表操作的一些其他组合代码一个简单的线条来完成,与在那里的功能结构。我有没有“闻到”的权利,以及如何做?

回答

17
list.map(i => i.key -> i.value).toMap 
+4

OP想要一个'HashMap'不是'Map' – samthebest

+1

警告:它不支持重复的密钥! –

8

另外:

Map(list map (i => i.key -> i.value): _*) 
+0

我想这样做的好处是,你可以指定地图的你所需要的类型,所以它更通用的模式 –

+1

@LuigiPlinge这是事实。我更喜欢使用'.toMap',因为它更可读。如果性能非常值得关注,_maybe_可以使用'breakOut'。 –

+0

我失去了半句:_ *我得到的下划线是功能变量的占位符,但我不能看到它在给表达如何适应,也没有星号和结肠的在这方面的作用。 – Gigatron

4

从集合创建(切记不要有new关键字)

val result: HashMap[Int, Int] = HashMap(myCollection: _*)