我有一个以下的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 -> value
形式的参数。你必须使用+
-operator。此外.get(key)
返回Option
,所以你必须在它上面.map
:
map.get("key2").map(_ + "key3" -> "value3")
map += ("key3" -> mutable.HashMap("key" -> "value3"))
同样在第二行中,您需要显式创建一个HashMap,否则它将与地图的类型([String, HashMap]
)不匹配。
这应该回答你的问题,但是Yuval Itzchakov是对的,如果你的对象有一个固定的结构,那么使用case类和JSON序列化程序如Jackson或Json4s可能是一个好主意。
你不能使用
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")