我想知道如何正确(甚至可以)将数据添加到HashMap
之类的ArrayList
上?
所以我有一个函数,该函数检查输入的字符串中的逗号并分隔值,将它们添加到ArrayList
中,然后根据输入数据的字段名称存储键ArrayList
到:
ArrayList<String> dataList = new ArrayList<>();
Map<String, ArrayList<String>> dataMap = new HashMap<String, ArrayList<String>>();
String[] parts;
public void CheckForMultipleEntries(String field, String data){
dataList.clear();
if(data.contains(",")){
data.replace("", "");
parts = data.split(",");
for(String part : parts){
dataList.add(part);
}
dataMap.put(field, dataList);
}
System.out.println(dataMap);
System.out.println(dataMap.get("test"));
}
但是对于"Header"
首先说我输入"test1, test2, test3"
-这将正确输入并输出(如:{Header=[test1, test2, test3]}
),但是如果输入下一个值,则输入{{1 }} "Body"
,然后在我输出地图时得到"test4, test5, test6"
。
为什么覆盖值而不覆盖键?我该如何解决?
感谢您的帮助!
答案 0 :(得分:2)
该值被覆盖,因为您正在使用
dataList.clear();
您要将数组列表dataList
的引用放入哈希图中。因此,每次分配新值时,您都必须重新初始化arraylist
将dataList.clear();
替换为dataList=new ArrayList<>();
将解决您的问题
答案 1 :(得分:0)
Smth。像那样。别忘了,每个映射键都有自己的List
:
public static void add(Map<String, List<String>> map, String key, String value) {
map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}