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