当我将(KEY, VALUE)
放入Map<String, List<String>>
这样的地图时,我想先检查KEY是否存在以决定是否必须创建一个新列表,通常是My Java Code看起来像这样:
Map<String, List<String>> example = new HashMap<>();
public void put(String k, String v){
if(example.containsKey(k)){
example.get(k).add(v);
return;
}
List<String> vs = new ArrayList<>();
vs.add(v);
example.put(k,vs);
}
它看起来不是很好。有没有办法让它更简单,更漂亮?
答案 0 :(得分:5)
如果你有Java 8,你可以把它写成一行:
example.computeIfAbsent(k, key -> new ArrayList<>()).add(v);
这使用lambda,因此如果需要,new ArrayList
仅 。
(k
和key
需要有不同的名称,因为它们是不同的变量)
答案 1 :(得分:1)
Map<String, List<String>> example = new HashMap<>();
public void put(String k, String v){
if (!example.containsKey(k)){
example.put(k, new ArrayList<>();
}
example.get(k).add(v);
}
可以说,这有点浪费 - 要求你得到你刚刚列出的清单 - 但在我看来,它更清洁,更具表现力。
答案 2 :(得分:0)
如果您不能使用其他库或java 8,您可以将整个地图包装并构建在您拥有的类中。
用你自己的课程:
将混乱局限于一个地方。
在幕后隐藏您正在使用地图的脸部。
可以将任何其他逻辑移动到。