簡體   English   中英

使用現有鍵將鍵值對添加到HashMap(Scala)

[英]Add key-value pair to a HashMap with an existing key (Scala)

我有以下HashMap

import collection.mutable.HashMap
val map = mutable.HashMap("key" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2"),
                          "key2" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2"))

我怎樣才能使地圖看起來像

val map = mutable.HashMap("key" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2"),
                          "key2" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2",
                                                    "key3" -> "value3"),
                          "key3" -> mutable.HashMap("key" -> "value"))

在我的腦海中會出現類似這樣的情況,但是我找不到正確的方法。

map.get("key2").put("key3" -> "value3")
map.put("key3" -> ("key" -> "value3"))

最終,我想要一個易於轉換為Json的結構

put方法不適用於key- key -> value形式的參數。 您必須使用+ -operator。 此外, .get(key)返回一個Option ,因此您必須對其進行.map

map.get("key2").map(_ + "key3" -> "value3")
map += ("key3" -> mutable.HashMap("key" -> "value3"))

同樣在第二行中,您需要顯式創建一個HashMap,否則它將與地圖的類型( [String, HashMap] )不匹配。

這應該可以回答您的問題,但是Yuval Itzchakov是正確的,如果您的對象具有固定的結構,那么使用案例類和JSON序列化程序(例如JacksonJson4s)可能是一個好主意。

你不能使用

map.get("key2").put("key3" -> "value3")

因為它返回Option並且需要兩個參數,而不是元組。 您首先需要通過調用get來解開值,然后像這樣調用它:

map.get("key2").get.put("key3", "value3")

但是,有更簡單的方法可以向可變映射添加新值:

map("key3") = mutable.HashMap("key" -> "value", "key2" -> "value2") 
map("key2")("key3") = "value3"

// or 

map += ("key3" -> mutable.HashMap("key" -> "value", "key2" -> "value2"))
map("key2") += ("key3" -> "value3")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM