Java 8映射合并方法

Ana*_*dis 8 java merge map java-8

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

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(30);
Run Code Online (Sandbox Code Playgroud)

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

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

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

nos*_*sid 18

你应该使用Map :: computeIfAbsent方法来懒惰地创建一个列表:

map.computeIfAbsent(search_key, k -> new ArrayList<>())
   .add(new_string);
Run Code Online (Sandbox Code Playgroud)