在开发项目中遇到了这样的一个问题:
一个repeatList里面有这样的数据:java
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'} ... ]
我要怎么作才能把他们合并为spa
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字段的公司名将同一公司的不一样数据构造一块儿,作法以下:code
总结:双重遍历+去重blog
(1)双重遍历构造数据:ip
//存储构造出来的list,list类型根据项目变化而变化,下面的问号都表示相关的类型,在这里都是要一致的 List<?> oList = new ArrayList<>(); Map<String,List<?>> 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方法便可,即在上面方法后面补上:get
//set去除outList里面重复的数据,保证每条数据的惟一性 Set set = new HashSet(oList); oList = new ArrayList(set); List<?> outList; outList.addAll(oList);
(3)这时候的结果就是:input
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'} ]
这就达到咱们想要的结果了it
但愿个人分享可以帮到你们,如果以为有用请赐一个赞!!!!class