博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java构造list,合并重复的数组
阅读量:6276 次
发布时间:2019-06-22

本文共 2503 字,大约阅读时间需要 8 分钟。

在开发项目中遇到了这样的一个问题:

一个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'}]

clipboard.png

这边根据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'}]

这就达到我们想要的结果了

希望我的分享能够帮到大家,若是觉得有用请赐一个赞!!!!

转载地址:http://eogpa.baihongyu.com/

你可能感兴趣的文章
Android程序开发初级教程(一) 开始 Hello Android
查看>>
使用Gradle打RPM包
查看>>
“我意识到”的意义
查看>>
淘宝天猫上新辅助工具-新品填表
查看>>
再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
查看>>
nginx反向代理
查看>>
操作系统真实的虚拟内存是什么样的(一)
查看>>
hadoop、hbase、zookeeper集群搭建
查看>>
python中一切皆对象------类的基础(五)
查看>>
modprobe
查看>>
android中用ExpandableListView实现三级扩展列表
查看>>
%Error opening tftp://255.255.255.255/cisconet.cfg
查看>>
java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
查看>>
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
查看>>
python多线程队列安全
查看>>
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>