如何向我的 Map<Integer>、List<String>> 添加一个值?

How can I add one more value to my Map<Integer>, List<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);

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

如果您打算用单行线替换地图的整个更新,您可以使用 Arrays.asList:

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

已更新

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

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

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

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]

您当然可以使用 lambda 表达式或显式方法来简化该过程

如果你想在声明后做,你可以这样做

        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 是列表的索引