2013-12-12 31 views
0
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()值的元素。 如何解決這個問題?基於參數值的列表的批處理元素

回答

2

使用Map<Integer, List<PoI>>(我假定id爲int - 或Integer -typed;無論如何,如果它是一個Integer,請使用.equals()代替==)。

您可以保留名單PoI s共享相同的ID。然後,您可以輕鬆地將他們的服務時間加起來。

EDIT(代碼片段):

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); 
} 
+0

可否請你提供一個代碼段?謝謝。 id是int。 –

+0

請參閱編輯過的帖子 –