如何将两个list存进map中

		// 获取“选定时间”内的片区名和垃圾总量
		List<GarbageDecrementDataVO> selectedList = weightRecordsDao.getByTimeAndAreaName(stationName, beginTime, endTime);
		//获取“之前时间段”的片区名和垃圾总量
		List<GarbageDecrementDataVO> beforeList = weightRecordsDao.getByTimeAndAreaName(stationName,beforeBeginTimeStr,beforeEndTimeStr);
		//存放返回的数据
		Map<String, String> map = new HashMap<>(16);

		if(Collections3.isEmpty(selectedList)){
			//两个集合都为空,则返回size为0的map
			if(Collections3.isEmpty(beforeList)) {
				return map;
			}else {
				//当“之前时间段”的集合不为空时,遍历并将值放进要返回的map中(value变成负值)
				map = beforeList.stream().collect(Collectors.toMap(b -> b.getRushAreaName(),b -> "-" + b.getTotal().toString()));
			}
		}else {
			//当“之前时间段”的集合为空时,遍历“选定时间”的集合并将值放进要返回的map中
			if(Collections3.isEmpty(beforeList)) {
				map = selectedList.stream().collect(Collectors.toMap(s -> s.getRushAreaName(),s -> s.getTotal().toString()));
			}else {
				//两者都不为空时
				//获取两个集合的迭代器
				Iterator<GarbageDecrementDataVO> it1 = selectedList.iterator();


				while(it1.hasNext()) {
					GarbageDecrementDataVO vo1 = it1.next();
					Iterator<GarbageDecrementDataVO> it2 = beforeList.iterator();
					while (it2.hasNext()){
						GarbageDecrementDataVO vo2 = it2.next();
						//当两个集合中的片区相等时,将“选定时间”的片区总量减去“之前时间段”的片区总量
						if(vo1.getRushAreaName().equals(vo2.getRushAreaName())){
							Double total = vo1.getTotal() - vo2.getTotal();
							map.put(vo1.getRushAreaName(),total.toString());
							//移除map中以存在的数据
							it1.remove();
							it2.remove();
							break;
						}
					}
				}
				//如果存在不相等的元素,再将其放进map中
				if(!Collections3.isEmpty(selectedList)){
					for (GarbageDecrementDataVO vo : selectedList){
						map.put(vo.getRushAreaName(),vo.getTotal().toString());
					}
				}
				if(!Collections3.isEmpty(beforeList)){
					for (GarbageDecrementDataVO vo : beforeList){
						map.put(vo.getRushAreaName(),"-"+vo.getTotal().toString());
					}
				}
			}
		}

猜你喜欢

转载自blog.csdn.net/weixin_43554942/article/details/88868085