基于参数值的List的批处理元素

时间:2013-12-12 13:45:44

标签: java list arraylist batch-processing

private List<PoI> batch(List<PoI> _POIs)
{
    List<PoI> _POIs_batched = new ArrayList<PoI>();
    for (PoI poi1 : _POIs) 
    {
        for (PoI poi2 : _POIs) 
        {
            if (poi1.getId() == poi2.getId())
            {
                PoI newPoI = new PoI(poi1.getId(),poi1.getServiceTime()+poi2.getServiceTime());
                _POIs_batched.add(newPoI);
            }
        }
    }

    return _POIs_batched;
}

我需要查找并批处理具有相同getId()值的元素。上面给出的代码的问题是我正在搜索元素对。但是,可能有两个以上的元素具有相同的getId()值。 如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用Map<Integer, List<PoI>>(我假设ID为int - 或Integer - 已键入;无论如何,如果是Integer,请使用.equals()代替==)。

您可以保持PoI个共享相同ID的列表。然后,您可以轻松添加服务时间。

编辑(代码链):

Map<Integer, List<PoI>> poisPerId = new HashMap<>();
for (PoI poi : _POIs){
    Integer id = poi.getId();
    List<PoI> pois = poisPerId.get(id);
    if(pois == null){
        pois = new ArrayList<PoI>();
        poisPerId.put(id, pois);
    }
    pois.add(poi);
}