问题描述:
现在有两个 List 集合 LA、LB,存的都是某个实体对象(假设该实体内容为 “时间”“数值A”“ 数值B ” )
其中 LA 中的元素只有“时间”和“数值A”有内容,LB 中只有“时间”和“数值B”有内容,元素都是按照时间顺序排列
而对于两个集合中元素的时间有相同的时间,也有各自单独的时间。
现在要将两个集合通过“时间”顺序合并为一个 List
设计合并的方法
运用 TreeMap 的特性,排序以及重复键的添加会替换。将两个 list 中元素的时间取出来作为键,元素本身作为值,然后存入 treemap 中,先都遍历存入,再遍历存交集部分。
/**
* ty
* 日数据统计分析
* @param LysimeterData实体
* @return 蒸渗仪设备名称
*/
public Page<LysimeterData> findDailyAnalysisPage(Page<LysimeterData> page, LysimeterData lysimeterData) {
lysimeterData.setPage(page);
//从数据库返回处理好的 蒸发量、渗漏量分析值。存在 list 里
List<LysimeterData> listEva = lysimeterDataDao.findDailyEvaportionAnalysisPage(lysimeterData);
List<LysimeterData> listLea = lysimeterDataDao.findDailyLeakageAnalysisPage(lysimeterData);
//用 treeMap 将两个list合二为一。利用 Treemap 的排序以及同键添加覆盖的特性
Map<Long,LysimeterData> lysMap = new TreeMap<Long,LysimeterData>();
for(LysimeterData lysEva : listEva){
lysMap.put(lysEva.getDailyTime().getTime(), lysEva);
}
for(LysimeterData lysLea : listLea){
lysMap.put(lysLea.getDailyTime().getTime(), lysLea);
}
for(LysimeterData lysEva : listEva){
for(LysimeterData lysLea : listLea){
if(lysEva.getDailyTime().getTime() == lysLea.getDailyTime().getTime() ){
lysEva.setLeaAvg(lysLea.getLeaAvg());
lysEva.setLeaMax(lysLea.getLeaMax());
lysEva.setLeaMin(lysLea.getLeaMin());
lysMap.put(lysEva.getDailyTime().getTime(), lysEva);
}
}
}
//将map转换成list
List<LysimeterData> list = new ArrayList<LysimeterData>();
Set<Long> keys = lysMap.keySet();
for(long l : keys){
list.add(lysMap.get(l));
}
page.setList(list);
page.setCount(list.size());
return page;
}