两集合以集合中元素的时间为基准合并为一个集合。

问题描述:

现在有两个 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;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值