如何为现有密钥添加值

时间:2016-01-15 15:13:52

标签: java hashmap

我正在使用循环语句在结果集中添加键和值,如果键已经存在,请更新该键并添加其值。

这是我的代码:

Map<Integer, Integer> item_id = new Hashmap<Integer , Integer>();

for (i=0 ; i<roomtype_id.length(); i++) {
  String query ="SELECT item_id , quantity from amenities_tb where roomtype_id = '"+roomtype_id.get(i)+"'"
  PreparedStatement pst = connection.preparedStatement(query);
  Result Set rs = pst.executeQuery();

  while(rs.next()) {
    if (item_id.containskey(rs.getInt(1))) {
      // update this key and add to its existing value
    }
    else {
      item_id.put(rs.getInt(1),rs.getInt(2));
    }
  }

5 个答案:

答案 0 :(得分:4)

在java 8中,你可以创建完整的if else只是一个语句:

item_id.compute (rs.getInt (1), (key, old) -> (old == null ? 0 : old)+rs.getInt (2));

答案 1 :(得分:1)

从地图中获取旧值,将值添加到地图中,然后将其放回地图中。

   Map<Integer, Integer> item_id = new Hashmap<Integer , Integer>();
   for(i=0 ; i<roomtype_id.length(); i++)
   {
      String query ="SELECT item_id , quantity from amenities_tb where roomtype_id = '"+roomtype_id.get(i)+"'"
      PreparedStatement pst = connection.preparedStatement(query);
      Result Set rs = pst.executeQuery();

      while(rs.next()){
                if(item_id.containskey(rs.getInt(1))){
                    // update this key and add to its existing value
                    int value = item_id.get(rs.getInt(1));
                    value += rs.getInt(2);
                    item_id.put(rs.getInt(1), value);
                }else{
                          item_id.put(rs.getInt(1),rs.getInt(2));
                }
      }

答案 2 :(得分:1)

尝试使用它:

  while(rs.next()){
            if(item_id.containskey(rs.getInt(1))){
             Integer value = item_id.get(rs.getInt(1));
             if(value == null) 
               value = 0;
              item_id.put(rs.getInt(1), value);
                      // update this key and add to its existing value
            }
  item_id.put(id, previousValue + x);

答案 3 :(得分:0)

要做到这一点,你需要让你的价值成为一个集合,例如: Map<Integer, List<Integer>>

或更简单的解决方案是使用google guava库: Multimap<Integer, Integer>

答案 4 :(得分:0)

在Java 8中,您可以使用merge

Integer key = rs.getInt(1);
Integer value = rs.getInt(2);
item_id.merge(key, value, Integer::sum);

另外,请确保keyvalue 非空

  

如果指定的键尚未与值关联或是   与null关联,将其与给定的非null值相关联。   否则,将相关值替换为给定的结果   重新映射函数,如果结果为null则删除。