Java 如何为现有密钥添加值

Java 如何为现有密钥添加值,java,hashmap,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_

我使用循环语句在结果集中的映射中添加键和值,如果键已经存在,则更新该键并添加到其值

这是我的代码:

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));
    }
  }
Map item_id=newhashmap();

对于(i=0;i要做到这一点,您需要将您的价值作为一个集合,例如:
Map

或者更简单的解决方案是使用google guava library:
Multimap

从映射中获取旧值,将值添加到映射中,然后将其放回映射中

   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));
                }
      }
Map item_id=newhashmap();

对于java 8中的(i=0;i),您可以通过一条语句来实现完整的if-else:

item_id.compute (rs.getInt (1), (key, old) -> (old == null ? 0 : old)+rs.getInt (2));
尝试使用以下方法:

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

在Java 8中,可以使用
merge

Integer key = rs.getInt(1);
Integer value = rs.getInt(2);
item_id.merge(key, value, Integer::sum);
另外,确保
不为空

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


item_id.put(rs.getInt(1),item_id.get(rs.getInt(1))+rs.getInt(2))
我认为OP的意思是整数加法,而不是将值添加到集合中。谢谢,但是为什么要将值分配给项目id?我没有将任何内容分配给
项目id
,这是地图的名称。我建议使用一个更有意义的名称,如
idMap
quantityMap