如何让这些简单而美丽?

时间:2015-02-07 09:17:22

标签: java refactoring

当我将(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);
}

它看起来不是很好。有没有办法让它更简单,更漂亮?

3 个答案:

答案 0 :(得分:5)

如果你有Java 8,你可以把它写成一行:

example.computeIfAbsent(k, key -> new ArrayList<>()).add(v);

这使用lambda,因此如果需要,new ArrayList

kkey需要有不同的名称,因为它们是不同的变量)

答案 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,您可以将整个地图包装并构建在您拥有的类中。

用你自己的课程:

  1. 将混乱局限于一个地方。

  2. 在幕后隐藏您正在使用地图的脸部。

  3. 可以将任何其他逻辑移动到。