2017-04-16 56 views
3

我有一张地图,其值是一个整数列表。如果在读卡器中找到密钥,我必须向列表中添加一个整数。我有下面的代码,除了一个以外每次都有效。换句话说,如果密钥存在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>()); 
    } 
}  

我不需要做任何事情,如果关键是没有找到,只需添加值几时。

回答

0

您发布的代码片段并不是您的实际完整代码,但无论如何,您需要有逻辑来处理第一次看到密钥。在第一种情况下,您应该初始化要存储在地图中的整数列表。类似这样的:

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

如果找不到密钥,该如何处理?我怀疑如果未找到密钥,则错过将第一个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); 
} 
0

希望这可以帮助您解决问题。

//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); 
     } 
0

您还没有提到要这不能不映射值只有当它是同一个列表,你可以使用Java 8

map.entrySet().forEach(entry -> { 
     if ("5" == entry.getKey()) { 
      ((List) entry.getValue()).add(5); 
      System.out.println(entry.getValue()); 
     } 
}); 
修改同一个列表