我正在使用循环语句在结果集中添加键和值,如果键已经存在,请更新该键并添加其值。
这是我的代码:
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));
}
}
答案 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);
另外,请确保key
和value
非空
如果指定的键尚未与值关联或是 与null关联,将其与给定的非null值相关联。 否则,将相关值替换为给定的结果 重新映射函数,如果结果为null则删除。