Adding a value to a list to an already existing key in Map

后端 未结 3 1689
自闭症患者
自闭症患者 2021-01-07 06:42

Evening!

I have the following Map:

HashMap myMap = new HashMap();

I then added th

相关标签:
3条回答
  • 2021-01-07 06:54

    I'd recommend using Map#computeIfAbsent, to always ensure retrieving a List from the 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"
    

    This means that if the map doesn't contain an entry for the key, it will use the provided lambda to generate a new value for the key and return that.

    0 讨论(0)
  • 2021-01-07 06:59
    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);
        }
    }
    
    0 讨论(0)
  • 2021-01-07 07:00

    Simply get the list from the map and then add the element to the list:

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

    There are some other things that can be remarked about your code. First of all, don't use the raw type ArrayList. Use generics:

    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);
    

    Second, program to interfaces, not implementations. In other words, program using interfaces Map and List rather than the implementations HashMap and ArrayList. This is a well-known OO programming principle, which makes it for example easier to switch to a different implementation, if necessary.

    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);
    

    Finally, a syntax tip: if you're using Java 7 or newer you can use <> and you don't have to repeat the type arguments:

    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");
    
    0 讨论(0)
提交回复
热议问题