我有例如关注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
答案 0 :(得分:4)
使用Map<Integer, Tst>
每年(地图的关键字)包含您今年所需的Tst
作为结果。
遍历您的listTotal
和每个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();
答案 1 :(得分:0)
使用地图维护从年份到TST结构的映射 迭代列表中的每个项目,检索相应的TST结构并手动更新A / B / C / D属性
答案 2 :(得分:0)
您应该可以通过定义自定义合并方法来实现:
List<tst> merge (List<tst> listA, List<tst> listB)
将listA中每个元素的属性与listB中相同索引的元素合并。
在list1,... list4上迭代调用此方法以获取listRequired。