我如何放入上述类型的地图中。我不想覆盖现有的映射。
到目前为止,我的代码是:
public class Store {
Map<String, List<String>> items;
public Store(){
items = new HashMap<String, List<String>>();
}
public boolean containsKey(String key) {
return items.containsKey(key);
}
public void put(String key, String item) {
List<String> myList = new ArrayList<>();
if (myList == null) {
myList = new ArrayList<String>();
items.put(key, item);
}
}
}
我在这里停了下来,因为我收到了一条错误消息,说"将项目类型更改为字符串列表字符串"。我不知道我做错了什么。
在这里,双重错误:
List<String> myList = new ArrayList<>();
if (myList == null) {
myList = new ArrayList<String>();
items.put(key, item);
}
myList
永远不会为null,您只是为其分配了一个列表!item
只是一个字符串,因此您不应将其用作值列表字符串列表的地图的值!
你去:
List<String> myList = items.get(key);
if (myList == null) {
myList = new ArrayList<String>();
}
myList.add(item);
items.put(key, myList);
而不是。
含义:首先,您检查是否已经有该键的列表。如果没有,您会创建一个空的。然后,您将新项目添加到(可能是新的)列表中。在最终将列表放入地图之前(它可能已经存在,但是您只需用"本身"覆盖该信息)。
,如果您想知道"专业人士"如何解决这个问题,请查看此问题以及我在问时收到的答案。
或使用为此要求而设计的Map.computeIfAbsent()
:如果不是特定键的现有映射,请添加新条目并获取(新的或现有)的值:
items.computeIfAbsent(key, k -> new ArrayList<>())
.add(item);