2014-10-20 88 views
0

我有以下Lists合併列表+更新項目

List<tst> listx; // tst object has properties: year, A, B, C, D 

year A B C D 
------------ 
2013 5 0 0 0 // list1 
2014 3 0 0 0 

2013 0 8 0 0 // list2 
2014 0 1 0 0 

2013 0 0 2 0 // list3 
2014 0 0 3 0 

2013 0 0 0 1 // list4 
2014 0 0 0 5 

,如果我用addAll法,listTotal將是:

year A B C D 
------------ 
2013 5 0 0 0 // listTotal 
2014 3 0 0 0 
2013 0 8 0 0 
2014 0 1 0 0 
2013 0 0 2 0 
2014 0 0 3 0 
2013 0 0 0 1 
2014 0 0 0 5 

如何將它們合併到listRequired這會是這樣?

year A B C D 
------------ 
2013 5 8 2 1 // listRequired 
2014 3 1 3 5 

回答

4

使用含有Map<Integer, Tst>,每年可爲(在地圖的關鍵)你今年的結果爲Tst

迭代通過你listTotal,併爲每個Tst中:

  • 如果Tst的一年是在地圖上不還,然後存儲Tst今年
  • 爲別的,得到尖沙咀地圖並將其與當前Tst合併

最後,地圖的values()就是您想要的listRequired中的內容。

代碼:

Map<Integer, Tst> resultPerYear = new HashMap<>(); 
for (Tst tst : listTotal) { 
    Tst resultForYear = resultPerYear.get(tst.getYear()); 
    if (resultForYear == null) { 
     resultPerYear.put(tst.getYear(), tst); 
    } 
    else { 
     resultForYear.merge(tst); 
    } 
} 
Set<Tst> result = resultPerYear.values(); 
0

使用地圖,以維持一年的映射到TST結構。
迭代列表的每個項目,檢索對應的TST結構並更新A/B/C/d手動

0

您應該能夠由定義自定義合併方法做到這一點屬性:

List<tst> merge (List<tst> listA, List<tst> listB) 

它將listA中每個元素的屬性與listB中相同索引的元素進行合併。

在list1,... list4上迭代調用此方法以獲取listRequired。