java - 构建一个新的数组来组织基于公共索引的数据

时间:2011-12-05 19:23:13

标签: java

这是一个简单的问题,我无法找到用于谷歌帮助的正确术语。我有一些循环一些数据的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做到这一点,但我发现似乎没有任何帮助。

2 个答案:

答案 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());
    }
}