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()值。 如何解决这个问题?
答案 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);
}