2011-10-31 136 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: _*)