一个特殊的List去重问题的解决方案
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7039842.html
场景描述:公司新活动,需要在活动页面显示指定利率的四种投资项目,并且如果存在同利率投资项目,要显示进度最低的投资项目,现在对问题进行简化,以字符串的形式进行描述:我们用list1来存放从数据库查询得到的所以符合条件的投资项目列表,现在对这个列表进行去重。
我们取出多余字段,并将有关字段拼装成字符串形式来进行模拟:比如"1.1-20"表示利率为1.1%,进度为20%的项目。
下面贴出实现算法:(主要就是关于List的去重问题)
1 public static void main(String[] args) { 2 List<String> list1 = new ArrayList<>(); 3 List<String> list2 = new ArrayList<>(); 4 list1.add("1.1-10"); 5 list1.add("2.2-10"); 6 list1.add("2.2-20"); 7 list1.add("4.4-20"); 8 list1.add("3.3-30"); 9 list1.add("2.2-5"); 10 list1.add("4.4-50"); 11 a:for(String s1 : list1){ 12 if(list2.isEmpty()){ 13 list2.add(s1); 14 }else{ 15 int j = 0; 16 for(String s2 : list2){ 17 j++; 18 if(s2.substring(0, 2).equals(s1.substring(0, 2))){ 19 if(Double.valueOf(s2.substring(4)) >= Double.valueOf(s1.substring(4))){ 20 list2.remove(s2); 21 list2.add(s1); 22 continue a;//这里不能是break,因为如果写成break,会导致错误:j和list2.size()的比较有一个错误点,那就是在list1的元素与list2中的最后一个元素有关,发生替换操作之后,break会跳出当前循环,但是会继续执行外部循环剩余的代码,去执行j与list2.size()的比较,结果会将这个元素再写入一次,所以这里直接跳转到外部循环开启的位置,来避免这种错误 23 }else{ 24 continue a;//此处问题同上 25 } 26 }else{ 27 continue; 28 } 29 } 30 if(j == list2.size()){ 31 list2.add(s1); 32 } 33 } 34 } 35 System.out.println(list2); 36 }
执行结果:
[1.1-10, 4.4-20, 3.3-30, 2.2-5]
第二种实现:
1 public static void main(String[] args) { 2 List<String> list1 = new ArrayList<String>(); 3 List<String> list2 = new ArrayList<String>(); 4 list1.add("1.1-30"); 5 list1.add("1.1-40"); 6 list1.add("1.1-50"); 7 list1.add("1.1-60"); 8 list1.add("2.2-20"); 9 list1.add("1.1-20"); 10 list1.add("3.3-10"); 11 list1.add("3.3-20"); 12 list1.add("2.2-10"); 13 list1.add("1.1-10"); 14 list1.add("2.2-5"); 15 list1.add("4.4-12"); 16 list1.add("4.4-11"); 17 for(String s1:list1){ 18 if(list2.isEmpty()){ 19 list2.add(s1); 20 }else{ 21 int j = 0; 22 for(String s2:list2){ 23 j++; 24 if(s1.substring(0,2).equals(s2.substring(0,2))){ 25 if(Double.parseDouble(s2.substring(4)) >= Double.parseDouble(s1.substring(4))){ 26 list2.remove(s2); 27 list2.add(s1); 28 break; 29 }else{ 30 break; 31 } 32 }else if(j == list2.size()){ 33 list2.add(s1); 34 break; 35 }else{ 36 continue; 37 } 38 } 39 } 40 } 41 System.out.println(list2); 42 }
运行结果:
[3.3-10, 1.1-10, 2.2-5, 4.4-11]
转载于:https://www.cnblogs.com/V1haoge/p/7039842.html
一个特殊的List去重问题的解决方案相关推荐
- 一个WEB网站高并发量的解决方案
一个WEB网站高并发量的解决方案 参考文章: (1)一个WEB网站高并发量的解决方案 (2)https://www.cnblogs.com/dotnetHui/p/7943605.html 备忘一下.
- WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案
WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案 参考文章: (1)WEB.NET error:请添加一个名为 jque ...
- 5分钟搭建一个粗粒度「视频去重」系统
Jupyter Notebook 教程: How to Build a Video Deduplication System 「视频去重」可以在海量的视频数据中实现侵权片段或者删除掉重复冗余的内容 . ...
- 消息幂等(去重)通用解决方案
欢迎关注方志朋的博客,回复"666"获面试宝典 消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值.我们通常会认为,消息中间件是一个可靠的组件--这里所 ...
- 消息幂等(去重)通用解决方案,真顶!
以下文章来源方志朋的博客,回复"666"获面试宝典 消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值.我们通常会认为,消息中间件是一个可靠的组件--这 ...
- 消息幂等(去重)通用解决方案,RocketMQ
消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值. 我们通常会认为,消息中间件是一个可靠的组件--这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢. ...
- PICASSO,一个高效的搜推广稀疏训练解决方案
作者:张远行,陈浪石,宋钺,袁满 来源:智能引擎事业部.阿里妈妈广告技术部.阿里云计算平台事业部 一.整体情况概述 近日,阿里巴巴自研稀疏训练引擎论文<PICASSO: Unleashing t ...
- 一个页面标题和过滤输出的解决方案(下)
上一篇说到:为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字. 抽象类代码简洁如下: public abstract class ReplaceTextListB ...
- Java两个列表根据属性去重_java8 如何对list操作 根据某一个字段进行判断去重对另一个字段进行累加 最终返回list?...
最简单的方法就是新建一个list ,你这个两个list可以合并成一个list ,然后就是分别定义属性来接受,循环这个list,然后add进去 List list1=new ArrayList(); l ...
最新文章
- 如何识别和避免间谍软件
- H3C 路由器配置console密码登录[学习]
- Nginx 301跳转踩坑总结
- 两个获取http页面的c#函数
- 内核虚拟机原理|网络可编程
- 牛客练习赛46 C	华华跟奕奕玩游戏 (期望,概率)(详解)
- iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇
- js中遇到的一个错误Uncaught SyntaxError: missing )after argument list
- 解决新安装的Ubuntu18.04没有网络连接的问题
- java实现创建窗口
- 蔚来与雷蛇联合推出NIO ES6限量版车型 售价46.78万元
- Oracle统计信息锁,oracle 由于impdp 引起的表统计信息被锁 ORA-20005: object statistics are locked...
- 读书笔记--Head First PHPMySql 目录
- Flutter进阶—点击、拖动和其他手势
- junit mockito_Mockito存根异常– JUnit,TestNG
- 彩电主板更换后图像是矩型怎么处理_液晶彩电主板常见故障维修
- 在使用缓冲流时,遇到Stream closed异常提醒
- 计算机基础土星,2012年一级B笔试模拟343
- Win10设置虚拟机桥接连接
- Google Play In-app Billing