Java 8中的map合并方法

10

我正在尝试创建一个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;
                });

这段代码简短而elegant,但我的问题是每次调用都会创建一个新的List。是否有办法在第一次合并后跳过列表创建,并将新字符串添加到第一个创建的列表中?


1
这段代码很简洁优雅,但是有问题。试图在Arrays.asList的结果上调用addAll是行不通的... - Holger
@Holger 你是正确的。我的错误在于 Arrays.asList(new_string) 给出了一个固定的列表,我会修复它。 - Anastasios Andronidis
1个回答

21

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接