有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何向映射<Integer>、列表<String>>中再添加一个值?

我有这个解决方案,可以将“c”添加到我的地图中,但是有没有其他方法可以在一行中完成我想要的任务

Map<Integer, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
map.put(1, list);

list.add("c");
map.put(1, list);

共 (4) 个答案

  1. # 1 楼答案

    如果你想在申报后做,你可以这样做

            Map<Integer, List<String>> map = new HashMap<>();
            map.put(1,List.of("a","b","c"));
    

    在声明中,你可以这样做

    Map<Integer, List<String>> map = new HashMap<>(Map.of(1,List.of("a", "b", "c")));
    

    如果您不知道如何访问列表中的特定元素(如果需要),您可以这样做

    map.get(1).get(i)
    

    其中i是列表的索引

  2. # 2 楼答案

    更新

    你可以使用Stream。of()创建初始列表。之后,如果只想添加新值,则有必要将其添加到列表中,因为对象的引用是相同的

    List<String> list = Stream.of("a", "b");
    map.put(1, list);
    list.add("c");
    
  3. # 3 楼答案

    我建议使用Map.computeIfAbsent。如果键不存在或指向null,则将使用提供的值(在本例中为ArrayList<String>实例)并返回它,否则将使用已经存在的值

    Map<Integer, List<String>> map = new HashMap<>();
    
    map.computeIfAbsent(1, v -> new ArrayList<>()).add("a");
    map.computeIfAbsent(1, v -> new ArrayList<>()).add("b");
    map.computeIfAbsent(2, v -> new ArrayList<>()).add("b");
    map.computeIfAbsent(1, v -> new ArrayList<>()).add("c");
    map.computeIfAbsent(2, v -> new ArrayList<>()).add("e");
    map.computeIfAbsent(3, v -> new ArrayList<>()).addAll(List.of("f","g","h"));
    map.computeIfAbsent(3, v -> new ArrayList<>()).add("i");
                           
    map.entrySet().forEach(System.out::println);
    

    印刷品

    1=[a, b, c]
    2=[b, e]
    3=[f, g, h, i]
    1=[a, b, c]
    2=[e, f, g]
    

    当然,您可以使用lambdas或显式方法来简化这个过程

  4. # 4 楼答案

    您不需要最后一次调用map.put(1, list),因为list已经是键1所指向的值,所以我猜这是一个单行线

    如果您的意思是用一行代码替换整个地图更新,您可以使用类似Arrays.asList的东西:

    map.put(1, Arrays.asList("a", "b", "c"));