一个特殊的List去重问题的解决方案
Posted 唯一浩哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个特殊的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]
以上是关于一个特殊的List去重问题的解决方案的主要内容,如果未能解决你的问题,请参考以下文章