List遍历相同数据合并(map里面某个key相同则合并数据)

以下操作都在Test2类 中编写

package core.util;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class Test2 {
public static void main(String[] args) {
		
		List<Map<String,Object>> dataList =new ArrayList<Map<String,Object>>();//存放所有数据
		String jsonStr1 = "{\"resultCode\" : 0,\"result\" : [ {\"orgId\" : null,\"categoryId\" : \"333f1328e6c6a7f3c2c7\",\"categoryName\" : \"北京分公司\",\"workOrderCount\" : null,\"planCounter\" : 15,\"actualCounter\" : 6,\"rank\" : null}, {\"orgId\" : null,\"categoryId\" : \"fc1bb1880968e77b5020\",\"categoryName\" : \"上海分公司\",\"workOrderCount\" : null,\"planCounter\" : 22,\"actualCounter\" : 13,\"rank\" : null}],\"msgId\" : \"fb971668\",\"success\" : true}";
        String jsonStr2 = "{\"resultCode\" : 0,\"result\" : [ {\"orgId\" : null,\"categoryId\" : \"333f1328e6c6a7f3c2c7\",\"categoryName\" : \"北京分公司\",\"workOrderCount\" : null,\"planCounter\" : 25,\"actualCounter\" : 5,\"rank\" : null}, {\"orgId\" : null,\"categoryId\" : \"fc1bb1880968e77b5020\",\"categoryName\" : \"上海分公司\",\"workOrderCount\" : null,\"planCounter\" : 36,\"actualCounter\" : 6,\"rank\" : null}],\"msgId\" : \"5225121a\",\"success\" : true}";
        String jsonStr3 = "{\"resultCode\" : 0,\"result\" : [ {\"orgId\" : null,\"categoryId\" : \"333f1328e6c6a7f3c2c7\",\"categoryName\" : \"北京分公司\",\"workOrderCount\" : null,\"planCounter\" : 25,\"actualCounter\" : 8,\"rank\" : null}, {\"orgId\" : null,\"categoryId\" : \"fc1bb1880968e77b5020\",\"categoryName\" : \"上海分公司\",\"workOrderCount\" : null,\"planCounter\" : 115,\"actualCounter\" : 8,\"rank\" : null}],\"msgId\" : \"e70ced01\",\"success\" : true}";
        String jsonStr4 = "{\"resultCode\" : 0,\"result\" : [ {\"orgId\" : null,\"categoryId\" : \"333f1328e6c6a7f3c2c7\",\"categoryName\" : \"北京分公司\",\"workOrderCount\" : null,\"planCounter\" : 40,\"actualCounter\" : 10,\"rank\" : null}, {\"orgId\" : null,\"categoryId\" : \"fc1bb1880968e77b5020\",\"categoryName\" : \"上海分公司\",\"workOrderCount\" : null,\"planCounter\" : 100,\"actualCounter\" : 30,\"rank\" : null}],\"msgId\" : \"7589d0d7\",\"success\" : true}";
        //把json串jsonStr1、jsonStr2、jsonStr3、jsonStr4转成需要的新list1、list2、list3、list4
        List<Map<String,Object>> list1=getCommon(jsonStr1,"1");
        List<Map<String,Object>> list2=getCommon(jsonStr2,"2");
        List<Map<String,Object>> list3=getCommon(jsonStr3,"3");
        List<Map<String,Object>> list4=getCommon(jsonStr4,"4");
        System.out.println("list1--"+list1);
        System.out.println("list2--"+list2);
        System.out.println("list3--"+list3);
        System.out.println("list4--"+list4);
        /**
         * 输出如下:
         * list1--[{optcompletrate=0.40, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7}, {optcompletrate=0.59, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020}]
		 * list2--[{inspcompletrate=0.20, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7}, {inspcompletrate=0.17, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020}]
		 * list3--[{jobcompletrate=0.32, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7}, {jobcompletrate=0.07, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020}]
		 * list4--[{termusedrate=0.25, categoryName=北京分公司,categoryId=333f1328e6c6a7f3c2c7}, { termusedrate=0.30, categoryName=上海分公司,categoryId=fc1bb1880968e77b5020}]
         */
        //把4个list分别合并成一个dataList
        dataList.addAll(list1);
        dataList.addAll(list2);
        dataList.addAll(list3);
        dataList.addAll(list4);
        System.out.println("dataList=="+dataList);
        /**
         * 输出如下:
         * dataList==[{optcompletrate=0.40, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7}, 
		 *            {optcompletrate=0.59, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020},
		 *    	      {inspcompletrate=0.20, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7},
		 *    		  {inspcompletrate=0.17, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020},
		 *    		  {jobcompletrate=0.32, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7}, 
		 *    		  {jobcompletrate=0.07, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020},
		 *    		  {categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7, termusedrate=0.25}, 
		 *    		  {categoryName=上海分公司, categoryId=fc1bb1880968e77b5020, termusedrate=0.30}]
         * */   
        List<Map<String,Object>> countList =getNewList(dataList);
		System.out.println("新list======"+countList);
		/**
		 * 输出如下:
		 * 新list======[{jobcompletrate=0.25, optcompletrate=0.40, inspcompletrate=0.25, categoryName=北京分公司, categoryId=333f1328e6c6a7f3c2c7, termusedrate=0.25}, 
		 * 			   {jobcompletrate=0.30, optcompletrate=0.59, inspcompletrate=0.30, categoryName=上海分公司, categoryId=fc1bb1880968e77b5020, termusedrate=0.30}]
		 * 
		 * */
		//转成新的json
		String jsonnew=JSON.toJSONString(countList);
		System.out.println("新json======"+jsonnew);
		//转成需要的格式如下:
		/**
		 * 输出如下:
		 * 新json======[{"jobcompletrate":"0.25","optcompletrate":"0.40","inspcompletrate":"0.25","categoryName":"北京分公司","categoryId":"333f1328e6c6a7f3c2c7","termusedrate":"0.25"},
		 * 			   {"jobcompletrate":"0.30","optcompletrate":"0.59","inspcompletrate":"0.30","categoryName":"上海分公司","categoryId":"fc1bb1880968e77b5020","termusedrate":"0.30"}]
		 */
	}
}
/***
	 * 处理json返回的数据中,需要字段转成list方法
	 * */
	public static List<Map<String,Object>> getCommon(String jsonstr,String str){
		JSONObject root = new JSONObject().parseObject(jsonstr);// 将json格式的字符串转换成json
        JSONArray dataArr = root.getJSONArray("result");//根据json对象中数组的名字解析出其所对应的值
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		Map<String,Object> map;
		//对解析出的数组进行遍历,获取所有的点位值
		for (int i = 0; i < dataArr.size(); i++) {
			 map =new HashMap<String,Object>();
			JSONObject dataBean = (JSONObject) dataArr.get(i);//得到数组中对应下标对应的json对象
			//根据json对象中的数据名解析出相应数据
			String categoryId = dataBean.getString("categoryId");
			String categoryName = dataBean.getString("categoryName");
			int planCounter = Integer.parseInt(dataBean.getString("planCounter"));
			int actualCounter = Integer.parseInt(dataBean.getString("actualCounter"));
			float num=(float)actualCounter / planCounter;
		    DecimalFormat df = new DecimalFormat("0.00");//格式化小数   
		    String rate = df.format(num);//返回的是String类型 
		    map.put("categoryId", categoryId);
		    map.put("categoryName", categoryName);
		    if("1".equals(str)){//1、第一个接口
		    	map.put("optcompletrate", rate);
		    }else if("2".equals(str)){//2、第二个接口
		    	map.put("inspcompletrate", rate);
		    }else if("3".equals(str)){//3、第三个接口
		    	map.put("jobcompletrate", rate);
		    }else{//4、第三个接口
		    	map.put("termusedrate", rate);
		    }
			
			list.add(map);
		}
		return list;
	}
/***
	 * 将list转成业务需要的list方法
	 * */
	public static List<Map<String,Object>> getNewList(List<Map<String,Object>> dataList){
		List<Map<String, Object>> countList = new ArrayList<Map<String,Object>>();//用于存放最后的结果
		for (int i = 0; i < dataList.size(); i++) {
			String categoryId = String.valueOf(dataList.get(i).get("categoryId").toString());
			int flag = 0;//0为新增数据,1为增加count
			for (int j = 0; j < countList.size(); j++) {
				String newcategoryId = String.valueOf(countList.get(j).get("categoryId").toString());
				if (categoryId.equals(newcategoryId)) {
					String optcompletrate="";//声明第一个接口操作率
					String inspcompletrate="";//声明第二个接口完成率
					String jobcompletrate="";//声明第三个接口百分率
					String termusedrate="";//声明第四个接口合格率
					
					if(String.valueOf(dataList.get(i).get("optcompletrate"))!="null"){
						optcompletrate =String.valueOf(dataList.get(i).get("optcompletrate"));
					}else if(String.valueOf(dataList.get(j).get("optcompletrate"))!="null"){
						optcompletrate =String.valueOf(dataList.get(j).get("optcompletrate"));
					}
					
					if(String.valueOf(dataList.get(i).get("inspcompletrate"))!="null"){
						inspcompletrate =String.valueOf(dataList.get(i).get("inspcompletrate"));
					}else if(String.valueOf(dataList.get(j).get("inspcompletrate"))!="null"){
						inspcompletrate =String.valueOf(dataList.get(j).get("inspcompletrate"));
					}
					
					if(String.valueOf(dataList.get(i).get("jobcompletrate"))!="null"){
						inspcompletrate =String.valueOf(dataList.get(i).get("jobcompletrate"));
					}else if(String.valueOf(dataList.get(j).get("jobcompletrate"))!="null"){
						inspcompletrate =String.valueOf(dataList.get(j).get("jobcompletrate"));
					}
					
					if(String.valueOf(dataList.get(i).get("termusedrate"))!="null"){
						inspcompletrate =String.valueOf(dataList.get(i).get("termusedrate"));
					}else if(String.valueOf(dataList.get(j).get("termusedrate"))!="null"){
						inspcompletrate =String.valueOf(dataList.get(j).get("termusedrate"));
					}
					
					countList.get(j).put("optcompletrate", optcompletrate);
					countList.get(j).put("inspcompletrate", inspcompletrate);
					countList.get(j).put("jobcompletrate", inspcompletrate);
					countList.get(j).put("termusedrate", inspcompletrate);
					flag = 1;
					continue;
				}
			}
			if (flag == 0) {
				countList.add(dataList.get(i));
			}
		}
		return countList;
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小志的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值