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