【基础】Java同集合内元素比较并去重

Java同一map集合内元素比较并去重

 

 

 

                    之前做了一个项目需求是前端要展示一到十二月份的数据,大概是这样的

但数据库查出的就值不可能每月都有固定的值 ,是这样的

为了方便前端展示对于没有的值则需要填充为0,因为有些值是固定的则可以通过数值来填充,然后通过集合添加到源数据中,但会有重复数据,则需要进一步处理,去掉没用的数据

具体实现思路如下:

public Map<String, Object> selectRegionalAnalysis(Map<String, Object> para) {
		Map<String,Object> resultMap = new HashMap<String,Object>();
		Set<Map<String, Object>> data = new HashSet<>();
		try {
			String[] months= {"01月","02月","03月","04月","05月","06月","07月","08月","09月","10月","11月","12月"};
			String[] mattertype= {"衣服","鞋子"};
			List<Map<String, Object>> list = this.hsxqMattersReportMapper.selectRegionalAnalysis(para);
			//Map<Object, List<Map<String,Object>>> result = report.stream().collect(Collectors.groupingBy(c -> c.get("mattermonth")));
            //通过循环填补空缺的值,但会产生重复数据
			for (int i = 0; i < list.size(); i++) {
				for (int j = 0; j < months.length; j++) {
					String mattermonth = list.get(i).get("mattermonth").toString();
					String counts = list.get(i).get("counts").toString();
					String mattername = list.get(i).get("mattername").toString();
					for (int k = 0; k < mattertype.length; k++) {
					if (!months[j].equals(mattermonth)) {
						Map<String, Object> result = new HashMap();
						result.put("mattermonth", months[j]);
						result.put("counts", 0);
						result.put("mattername",mattertype[k]);
						data.add(result);
					} else {
						Map<String, Object> result = new HashMap();
						result.put("mattermonth", mattermonth);
						result.put("counts", counts);
						result.put("mattername", mattername);
						data.add(result);
					}
				}
				}
				}

			List<Map<String,Object>> dataList = new ArrayList<>(data);
			//排序(这步可省略)
			Collections.sort(dataList, new Comparator<Map<String,Object>>(){
				public int compare(Map<String,Object> o1,Map<String,Object> o2){
					return o2.get("mattermonth").toString().compareTo(o1.get("mattermonth").toString());
				}
			});
			// 从dataList中索引为0开始往后遍历
			for (int i = 0; i < dataList.size() - 1; i++) {
				// 从list中索引为 list.size()-1 开始往前遍历
				for (int j = dataList.size() - 1; j > i; j--) {
					// 同集合内进行比较 i 正序, j 倒序
					if (dataList.get(j).get("mattermonth").equals(dataList.get(i).get("mattermonth")) && dataList.get(j).get("mattername").equals(dataList.get(i).get("mattername"))) {
						// 根据条件去重
						if (Integer.valueOf(dataList.get(j).get("counts").toString())>0){
							dataList.remove(i);
						}else{
							dataList.remove(j);
						}
					}
				}
			}
			ReturnUtil.createSuccess(resultMap,dataList, CommonRest.QUERY_SUCCESS);
		} catch (Exception e) {
			e.printStackTrace();
			ReturnUtil.createError(resultMap, CommonRest.OPER_FAILD);
		}

		return resultMap;
	}

有不懂的地方可以留言,觉得不错请顶一下呗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值