我遇到了使用 java 检索数据的问题。谁能指导我如何找到它的解决方案。
Map<String,String> map = new HashMap<String,String>();
map.put("8004","Lead");
map.put("8004","Opportunity");
map.put("8004","Quote");
map.put("8004","Contract");
map.put("8005","CreatContract" );
map.put("8005","ManageContract" );
map.put("8005","SelectContract" );
//System.out.println(map);
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry pair = (Map.Entry)it.next();
//boolean blnExists = map.containsValue(pair.getValue());
System.out.println(pair.getKey() + " = " + pair.getValue());
}
输出:
8004 = Contract
8005 = SelectContract
预期输出:
8004 = lead,opportunity,Quote
8005 = CreateContracr,ManageContract
最佳答案
当您在 HashMap
上调用 put
且映射中已存在给定键的条目时,您传递的值将替换 map 上该键的任何内容。所以如果你这样做:
map.put("8004","Lead");
map.put("8004","Opportunity");
那么第二个 put
将覆盖第一个 put
的值。您必须自行检查 map 是否已包含值,如果包含则附加新值。例如,编写一个实用方法:
public void putAppend(Map<String, String> map, String key, String value) {
if (map.containsKey(key)) {
map.put(key, map.get(key) + "," + value);
} else {
map.put(key, value);
}
}
然后使用它:
putAppend(map, "8004", "Lead");
putAppend(map, "8004", "Opportunity");
如果您希望该值实际上是一个 List
而不是 String
,请适当更改映射:
Map<String, List<String>> map = new HashMap<>();
并使 putAppend
方法如下所示:
public void putAppend(Map<String, List<String>> map, String key, String value) {
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
map.put(key, map.get(key).add(value));
}
如果您使用的是 Java 8,则可以使用 computeIfAbsent
和 lambda 表达式:
public void putAppend(Map<String, List<String>> map, String key, String value) {
map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}
您还可以使用诸如Google Guava之类的库,其中有 Multimap
,这是一个 Map
,可以为一个键保存多个值。
关于java - 如何使用 Java 将值存储为列表而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38240078/