Java 8映射合并方法

时间:2014-06-19 11:50:24

标签: java map merge java-8

我正在尝试创建一个HashMap,它将包含一个整数作为键,一个字符串列表作为值:

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(30);

我想以某种方式有效地填充它。我的意思是:

map.merge(search_key, new ArrayList<>(Arrays.asList(new_string)), (v1, v2) -> {
                    v1.addAll(v2);
                    return v1;
                });

此代码很小且优雅但我的问题是我在每次调用中都会创建一个新的列表。有没有什么办法可以在第一次合并后跳过List创建,只需在第一个创建的列表中添加new_string?

1 个答案:

答案 0 :(得分:18)

您应该使用方法Map::computeIfAbsent懒惰地创建列表:

map.computeIfAbsent(search_key, k -> new ArrayList<>())
   .add(new_string);