Java 8 地图合并方法

Posted

技术标签:

【中文标题】Java 8 地图合并方法【英文标题】:Java 8 map merge method 【发布时间】:2014-08-09 22:47:27 【问题描述】:

我正在尝试创建一个包含一个整数作为键和一个字符串列表作为值的 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 ?

【问题讨论】:

“这段代码小而优雅”但是坏了。尝试在 Arrays.asList 的结果上调用 addAll 是行不通的…… @Holger 你是对的。我的错误是 Arrays.asList(new_string) 给出了一个固定列表,我会修复它。 【参考方案1】:

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

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

【讨论】:

以上是关于Java 8 地图合并方法的主要内容,如果未能解决你的问题,请参考以下文章