原创作品,可以转载,但是请标注出处地址: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去重问题的解决方案相关推荐

  1. 一个WEB网站高并发量的解决方案

    一个WEB网站高并发量的解决方案 参考文章: (1)一个WEB网站高并发量的解决方案 (2)https://www.cnblogs.com/dotnetHui/p/7943605.html 备忘一下.

  2. WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案

    WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案 参考文章: (1)WEB.NET error:请添加一个名为 jque ...

  3. 5分钟搭建一个粗粒度「视频去重」系统

    Jupyter Notebook 教程: How to Build a Video Deduplication System 「视频去重」可以在海量的视频数据中实现侵权片段或者删除掉重复冗余的内容 . ...

  4. 消息幂等(去重)通用解决方案

    欢迎关注方志朋的博客,回复"666"获面试宝典 消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值.我们通常会认为,消息中间件是一个可靠的组件--这里所 ...

  5. 消息幂等(去重)通用解决方案,真顶!

    以下文章来源方志朋的博客,回复"666"获面试宝典 消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值.我们通常会认为,消息中间件是一个可靠的组件--这 ...

  6. 消息幂等(去重)通用解决方案,RocketMQ

    消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值. 我们通常会认为,消息中间件是一个可靠的组件--这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢. ...

  7. PICASSO,一个高效的搜推广稀疏训练解决方案

    作者:张远行,陈浪石,宋钺,袁满 来源:智能引擎事业部.阿里妈妈广告技术部.阿里云计算平台事业部 一.整体情况概述 近日,阿里巴巴自研稀疏训练引擎论文<PICASSO: Unleashing t ...

  8. 一个页面标题和过滤输出的解决方案(下)

    上一篇说到:为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字. 抽象类代码简洁如下: public abstract class ReplaceTextListB ...

  9. Java两个列表根据属性去重_java8 如何对list操作 根据某一个字段进行判断去重对另一个字段进行累加 最终返回list?...

    最简单的方法就是新建一个list ,你这个两个list可以合并成一个list ,然后就是分别定义属性来接受,循环这个list,然后add进去 List list1=new ArrayList(); l ...

最新文章

  1. 如何识别和避免间谍软件
  2. H3C 路由器配置console密码登录[学习]
  3. Nginx 301跳转踩坑总结
  4. 两个获取http页面的c#函数
  5. 内核虚拟机原理|网络可编程
  6. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)
  7. iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇
  8. js中遇到的一个错误Uncaught SyntaxError: missing )after argument list
  9. 解决新安装的Ubuntu18.04没有网络连接的问题
  10. java实现创建窗口
  11. 蔚来与雷蛇联合推出NIO ES6限量版车型 售价46.78万元
  12. Oracle统计信息锁,oracle 由于impdp 引起的表统计信息被锁 ORA-20005: object statistics are locked...
  13. 读书笔记--Head First PHPMySql 目录
  14. Flutter进阶—点击、拖动和其他手势
  15. junit mockito_Mockito存根异常– JUnit,TestNG
  16. 彩电主板更换后图像是矩型怎么处理_液晶彩电主板常见故障维修
  17. 在使用缓冲流时,遇到Stream closed异常提醒
  18. 计算机基础土星,2012年一级B笔试模拟343
  19. Win10设置虚拟机桥接连接
  20. Google Play In-app Billing

热门文章

  1. python如何得到13位时间戳?
  2. 2021高考池州成绩查询,2021池州高考信息网
  3. webrtc静音检测
  4. MFC小笔记:父子窗口传递消息
  5. Linux内核生成版本号的一些研究
  6. 95-910-140-源码-FlinkSQL-FlinkSQL简介
  7. 【ElasticSearch】Es 源码之 GatewayModule GatewayService 源码解读
  8. 【高并发】JUC中的Executor框架详解1
  9. Flink 1.8.0编译:flink-fs-hadoop-shaded找不到
  10. Drools 7.11 :入门程序