使用现有密钥(Scala)将键值对添加到HashMap

问题描述 投票:0回答:2

我有一个以下的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的结构

scala
2个回答
2
投票

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序列化程序如JacksonJson4s可能是一个好主意。


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")
© www.soinside.com 2019 - 2024. All rights reserved.