首页 > 代码库 > 一个特殊的List去重问题的解决方案
一个特殊的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]
一个特殊的List去重问题的解决方案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。