在开发项目中遇到了这样的一个问题:
一个repeatList里面有这样的数据:repeatList=[ {sort='0', company='A公司', value='28432'} {sort='0', company='A公司', value='8263685'} {sort='0', company='A公司', value='1234'} {sort='0', company='B公司', value='2234'} {sort='0', company='B公司', value='567'} {sort='0', company='C公司', value='85789'} ...]
我要怎么做才能把他们合并为
list=[ {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='C公司', value1='85789'}]
这边根据b字段的公司名将同一公司的不同数据构造一起,做法如下:
总结:双重遍历+去重
(1)双重遍历构造数据:
//存储构造出来的list,list类型根据项目变化而变化,下面的问号都表示相关的类型,在这里都是要一致的List oList = new ArrayList<>();Map> map = new HashedMap();//第一层for遍历for(? input : repeatList){ List list = map.get(input.getString("company")); if (list == null) { list = new ArrayList<>(); list.add(input); map.put(input.getString("company"), list); } for (? input2 : repeatList){ if(input.getString("company").equals(input2.getString("company")) && !list.contains(input2)){ list.add(input2); } } /*合并筛选出来的同类数据,new出一个用来暂时存储遍历的数据的, 定义在外面,然后for完之后再用oLsit进行add,就会出现同属性名的值会被后面覆盖,不同属性名则补充添加, 所以company和sort就无需变属性名,但是value就需要变化*/ ? mergePd = new ?(); //第二层for遍历 for(? x : list){ mergePd.put("company", String.valueOf(x.get("company"))); mergePd.put("sort", String.valueOf(x.get("sort"))); //定义一个标志,改变value的属性名,达到区分的效果 String sign = 1; mergePd.put("value" + sign, String.valueOf(x.get(value))); sign ++; } oList.add(mergePd);}
经过上面的构造,会出现这样的结果:
oList=[ {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='C公司', value1='85789'}]
(2)去重
因为是每条数据都遍历了,所以会出现一定数量的重复,这时候就需要做去重的步骤,使用java的set方法即可,即在上面方法后面补上://set去除outList里面重复的数据,保证每条数据的唯一性Set set = new HashSet(oList);oList = new ArrayList(set);List outList;outList.addAll(oList);
(3)这时候的结果就是:
outList=[ {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='C公司', value1='85789'}]
这就达到我们想要的结果了
希望我的分享能够帮到大家,若是觉得有用请赐一个赞!!!!