java—将值添加到Map中已存在的键的列表中

gmxoilav  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(481)

傍晚!
我有以下Map:

HashMap<String, ArrayList> myMap = new HashMap<String, ArrayList>();

然后我添加了以下数据:

ArrayList myList = new ArrayList();
myList.add("Test 1");
myList.add("Test 2");
myList.add("Test 3");
myMap.put("Tests", myList);

这给我留下了以下数据:
关键:测试
值:测试1、测试2、测试3
我的问题是,如何在已经存在的键上添加新值?例如,如何将值“test4”添加到键“tests”上。
谢谢。

sgtfey8w

sgtfey8w1#

我建议使用 Map#computeIfAbsent ,以始终确保检索 List 从Map上看:

private final Map<String, List<String>> example = new HashMap<>();

private List<String> getList(String key) {
    return this.example.computeIfAbsent(key, k -> new ArrayList<>());
}

//elsewheres
getList("test").add("foobar");
getList("test").forEach(System.out::println); // "foobar"

这意味着如果Map不包含 key ,它将使用提供的lambda为键生成一个新值并返回该值。

nnt7mjpx

nnt7mjpx2#

只需从Map中获取列表,然后将元素添加到列表中:

ArrayList list = myMap.get("Tests");
list.add("Test4");

关于你的代码还有其他一些值得注意的地方。首先,不要使用原始类型 ArrayList . 使用泛型:

HashMap<String, ArrayList<String>> myMap = new HashMap<String, ArrayList<String>>();

ArrayList<String> myList = new ArrayList<String>();
myList.add("Test 1");
myList.add("Test 2");
myList.add("Test 3");
myMap.put("Tests", myList);

第二,程序到接口,而不是实现。换句话说,程序使用接口 Map 以及 List 而不是实现 HashMap 以及 ArrayList . 这是一个众所周知的oo编程原则,例如,如果需要的话,可以更容易地切换到不同的实现。

Map<String, List<String>> myMap = new HashMap<String, List<String>>();

List<String> myList = new ArrayList<String>();
myList.add("Test 1");
myList.add("Test 2");
myList.add("Test 3");
myMap.put("Tests", myList);

最后,一个语法提示:如果您使用的是Java7或更新版本,那么您可以使用 <> 您不必重复类型参数:

Map<String, List<String>> myMap = new HashMap<>();

List<String> myList = new ArrayList<>();
myList.add("Test 1");
myList.add("Test 2");
myList.add("Test 3");
myMap.put("Tests", myList);

myMap.get("Tests").add("Test 4");
6jjcrrmo

6jjcrrmo3#

import java.util.*;

class M {
    public static void main( String ... args ) {
        List<String> l = new ArrayList<>();
        l.add("Test 1");
        l.add("Test 2");
        l.add("Test 3");

        Map<String,List<String>> m = new HashMap<>();
        m.put("Tests", l );

        // some time later that day ... 
        m.computeIfAbsent("Tests", k -> new ArrayList<>()).add("Test 4");
        System.out.println(m);
    }
}

相关问题