如何让这些简单又漂亮?

How to make these simple and beautiful?

当我把一个(KEY, VALUE)放到一个映射中,比如Map<String, List<String>>,我想先检查KEY是否存在,以决定是否要创建一个新的List,通常是我的Java 代码如下所示:

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);
}

看起来不太好看。有没有什么办法可以让它更简单更漂亮?

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

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

这使用了 lambda,因此 new ArrayList 在需要时创建。

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

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);
}

可以说,这有点浪费 - 要求您获取刚刚放置的列表 - 但在我看来,它更清晰,更具表现力。

如果您不能使用其他库,或者 java 8,您可以将整个地图包装起来并构建在您自己的 class 中。

你自己 class 你:

  1. 把混乱限制在一个地方。

  2. 隐藏您在幕后使用地图的面孔。

  3. 有地方可以移动任何额外的逻辑。