java小算法介绍-合并List中满足某些字段相同的记录
来源:互联网 发布:电话软件app 编辑:程序博客网 时间:2024/06/01 09:16
java小算法介绍-合并List中满足某些字段相同的记录
有这么一个需求:List中存放的是一个对象,如Student,里面有n个字段,现在想合并列表中满足一些字段相等的情况下合并其中的金额等其他字段。如:
Student的字段:
class Student{private String store;private int money;private Date date;private Integer status=0;public String getStore() {return store;}public void setStore(String store) {this.store = store;}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public Student() {super();}/*public Student(String store, int money, Date date,Integer status) {super();this.store = store;this.money = money;this.date = date;this.status=status;}*/@Overridepublic String toString() {return "\nStudent [store=" + store + ", money=" + money + ", date="+ DateUtil.formatDate(date, "yyyy-MM-dd") + ", status=" + status + "]\n";}public Student(String store, int money, Date date) {super();this.store = store;this.money = money;this.date = date;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}}
现在想根据: store与date相同的记录合并其中的金额到第一次出现的那条记录中(可用于后续插入数据库等处理)。在这里我额外加上了非业务上需求的status字段,即状态位,用于标识该记录是否已经被合并过了。
我的思路是这样: 遍历每条记录,取出当前记录的status与store、date值,当status不等于1,即还没被合并的前提下,遍历后面的所有记录,在还没被合并的前提下,判断是否有store跟state等于当前记录下来的store和date值,如果有,则合并到当前记录,并记录被合并的记录的status=1,标识已经被合并了。
talk is cheap,now show you my code:
@Testpublic void testList() throws Exception{String format="yyyy-MM-dd";Student student1=new Student("bb",12,DateUtil.formatString("2017-06-01", format));Student student2=new Student("aa",13 ,DateUtil.formatString("2017-06-01", format));Student student3=new Student("bb",12,DateUtil.formatString("2017-06-01", format));Student student4=new Student("dd",14,DateUtil.formatString("2017-06-02", format));Student student5=new Student("cc",15,DateUtil.formatString("2017-06-03", format));Student student6=new Student("bb",16,DateUtil.formatString("2017-06-03", format));Student student7=new Student("bb",17,DateUtil.formatString("2017-06-03", format));Student student8=new Student("dd",18,DateUtil.formatString("2017-06-04", format));Student student9=new Student("cc",19,DateUtil.formatString("2017-06-04", format));Student student10=new Student("dd",20,DateUtil.formatString("2017-06-04", format));Student student11=new Student("aa",22,DateUtil.formatString("2017-06-01", format));List<Student> list=Lists.newArrayList();list.add(student1);list.add(student2);list.add(student3);list.add(student4);list.add(student5);list.add(student6);list.add(student7);list.add(student8);list.add(student9);list.add(student10);list.add(student11);System.out.println("合并前list: "+list);for(int i=0;i<list.size();i++){Student student=list.get(i);if (!student.getStatus().equals(1)) {String store=student.getStore();Date date=student.getDate();for (int j = i+1; j < list.size(); j++) {if (!list.get(j).getStatus().equals(1)) {Student mergeStudent=list.get(j);if (mergeStudent.getStore().equals(store) && DateUtils.isSameDay(date, mergeStudent.getDate())) {student.setMoney(student.getMoney()+mergeStudent.getMoney());mergeStudent.setStatus(1);}}}}}System.out.println();System.out.println("合并后list: "+list);}
结果:
合并前list: [Student [store=bb, money=12, date=2017-06-01, status=0], Student [store=aa, money=13, date=2017-06-01, status=0], Student [store=bb, money=12, date=2017-06-01, status=0], Student [store=dd, money=14, date=2017-06-02, status=0], Student [store=cc, money=15, date=2017-06-03, status=0], Student [store=bb, money=16, date=2017-06-03, status=0], Student [store=bb, money=17, date=2017-06-03, status=0], Student [store=dd, money=18, date=2017-06-04, status=0], Student [store=cc, money=19, date=2017-06-04, status=0], Student [store=dd, money=20, date=2017-06-04, status=0], Student [store=aa, money=22, date=2017-06-01, status=0]]合并后list: [Student [store=bb, money=24, date=2017-06-01, status=0], Student [store=aa, money=35, date=2017-06-01, status=0], Student [store=bb, money=12, date=2017-06-01, status=1], Student [store=dd, money=14, date=2017-06-02, status=0], Student [store=cc, money=15, date=2017-06-03, status=0], Student [store=bb, money=33, date=2017-06-03, status=0], Student [store=bb, money=17, date=2017-06-03, status=1], Student [store=dd, money=38, date=2017-06-04, status=0], Student [store=cc, money=19, date=2017-06-04, status=0], Student [store=dd, money=20, date=2017-06-04, status=1], Student [store=aa, money=22, date=2017-06-01, status=1]]
好了,就介绍到这里吧!下面继续介绍我的ssm框架整合实战-博客系统开发
阅读全文
0 0
- java小算法介绍-合并List中满足某些字段相同的记录
- SQL 合并某些字段相同的记录
- 合并相同记录字段数据
- java List合并相同的项问题
- sybase ASA list 合并相同内容的字段
- 利用SQL语言有没有办法查到表中哪些记录中的全部(或某些字段)的值相同?
- List相同字段相加的JAVA实现
- scala合并文件,删除具有相同字段的记录
- list 根据相同字段合并数据
- java 两个相同元素的List,合并排序去除重复元素的快速算法
- sql中怎样把同一张表中相同字段的内容合并为一条记录(合并的记录的后面不加逗号)?
- 数据库记录中重复的某些字段的数据筛选
- list 中删除满足某个条件的所有记录
- sql中怎样把同一张表中相同字段的内容合并为一条记录(不同字段的那一列每个记录后面加逗号)
- 数据库查询记录中某些字段重复的方法
- 查询记录中几个字段相同的记录
- 根据两个list的相同字段比较,合并成一个list
- 合并相同的行(记录)
- redis保存失败(save (error) ERR)+redis关闭失败:Failed opening the RDB file dump.rdb XXX for saving: Permissio
- 2、Linux文件操作命令
- C语言常用字符串接口总结
- Vim配置手册
- PHP配置调试工具XDebug
- java小算法介绍-合并List中满足某些字段相同的记录
- Android studio实现按钮的点击事件
- 阿里云 LNMP 环境配置
- 隐私政策声明
- 百度统计初级统计指标
- poj 贪心之1083 Moving Tables
- WS服务总结
- J.U.C.Locks 体系结构
- opencv之模板匹配及应用 归一化 寻找最值