在地图中正确填充列表
Posted
技术标签:
【中文标题】在地图中正确填充列表【英文标题】:properly populate a list in a map 【发布时间】:2017-09-12 00:22:12 【问题描述】:我有一张地图,它的值是一个整数列表。如果在阅读器中找到密钥,我必须在列表中添加一个整数。我下面的代码每次都有效,除了一个。换句话说,如果键存在 5 次,列表会说它只有 4 次。我错过了什么?谢谢!
Map<String, List<Integer>> map = new TreeMap<String, List<Integer>>();
String key; // the string from my reader
if (map.containsKey(key))
map.get(key).add(value); //value being an integer gotten earlier
我的代码在构造函数中将键添加到地图中,如下所示:
while (reader.ready())
key = reader.readLine();
if(!key.isEmpty())
map.put(key, new ArrayList<Integer>());
如果没有找到键我不需要做任何事情,只需在找到时添加值即可。
【问题讨论】:
【参考方案1】:您发布的代码 sn-p 不是您实际的完整代码,但无论如何您需要有逻辑来处理第一次看到键时。在第一种情况下,您应该初始化要存储在地图中的整数列表。像这样的:
public static void addValue(String key, Integer value,
Map<String, List<Integer>> map)
List<Integer> list = map.get(key);
if (list == null)
list = new ArrayList<>();
list.add(value);
public static void main(String[] args)
Map<String, List<Integer>> map = new TreeMap<String, List<Integer>>();
String key; // the string from my reader
Integer value;
addValue(key, value, map);
【讨论】:
【参考方案2】:如果找不到密钥,你如何处理?如果找不到键,我怀疑您错过了将第一个 Integer 值添加到列表中。
if (map.containsKey(key))
map.get(key).add(value); //value being an integer gotten earlier
else
List<Integer> list = new ArrayList<>();
list.add(value); //add value to the list
map.put(key, list);
【讨论】:
【参考方案3】:希望这能帮助您解决问题。
//if key not exists insert key
if(!map.containsKey(key))
List<Integer> list = new ArrayList<Integer>();
list.add(value);
map.put(key,list);
//if key exists do this...
else
List<Integer> list = new ArrayList<Integer>();
//Getting previous existing elements on map at that index and adding to list back
list.addAll(map.get(key));
map.put(list);
【讨论】:
【参考方案4】:您没有提到要修改相同的列表,只有当它是相同的列表时才能修改映射值,您可以使用 java 8
map.entrySet().forEach(entry ->
if ("5" == entry.getKey())
((List) entry.getValue()).add(5);
System.out.println(entry.getValue());
);
【讨论】:
【参考方案5】:您可以使用 computeIfAbsent:
map.computeIfAbsent(key, k -> new ArrayList<>()).add(yourValue);
【讨论】:
以上是关于在地图中正确填充列表的主要内容,如果未能解决你的问题,请参考以下文章
在 NavigationView 中清除 SwiftUI 列表未正确返回默认值
Google 地图自动填充的“place_changed”以外的事件