如何向我的 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 是列表的索引
我有这个解决方案可以将“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 是列表的索引