这是一个简单的问题,我无法找到用于谷歌帮助的正确术语。我有一些循环一些数据的java代码,我最终得到两条信息:一个int
id和一个int
数量。
但是,有时候ID是相同的,我想组合它们的数量,而不是在数组中有新的条目。
在PHP中,我会这样做(假设$products
是一个包含大量id
/ quant
数据的数组,当然):
$newArray = array();
for($products as $id > $quant){
if(array_key_exists($id, $newArray)){
$newArray[ $id ] += $quant;
} else {
$newArray[ $id ] = $quant;
}
}
我正在尝试用Java做到这一点,但我发现似乎没有任何帮助。
答案 0 :(得分:2)
使用HashMap:
1. Get the id
2. See if the id is present in the map
3. if not
insert (id, quantity)
else (i.e. if present)
quantity = hashmap.get(id);
quantity = quantity + new_quantity
hashmap.put(id, quantity);
可帮助?
有很多方法,hashmaps占用更多内存。您也可以使用2个数组执行此操作,但之后您将花费更多时间搜索数组。
答案 1 :(得分:1)
使用map implementation, like HashMap
。
或多或少;根据需要调整类型:
Map<Integer> map = new HashMap<Integer>();
for (Product p : products) {
if (map.hasKey(p.getId()) {
map.put(p.getId(), map.get(p.getId()) + p.getQuant());
} else {
map.put(p.getId(), p.getQuant());
}
}
使主线代码可读更清晰:
// Mainline code
Map<Integer> map = new HashMap<Integer>();
for (Product p : products) {
putOrAddQuant(map, p);
}
// Extracted helper
public void putOrAddQuant(Map<Integer> map, Product p) {
if (map.hasKey(p.getId())) {
map.put(p.getId(), map.get(p.getId()) + p.getQuant());
} else {
map.put(p.getId(), p.getQuant());
}
}