【问题标题】:Java 8 map merge methodJava 8 地图合并方法
【发布时间】: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) 给出了一个固定列表,我会修复它。

标签: java map merge java-8


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 2017-03-02
    • 2012-06-16
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多