一個特殊的List去重問題的解決方案
阿新 • • 發佈:2017-06-17
list去重 clas pty print else 進行 替換 地址 列表
原創作品,可以轉載,但是請標註出處地址:http://www.cnblogs.com/V1haoge/p/7039842.html
場景描述:公司新活動,需要在活動頁面顯示指定利率的四種投資項目,並且如果存在同利率投資項目,要顯示進度最低的投資項目,現在對問題進行簡化,以字符串的形式進行描述:我們用list1來存放從數據庫查詢得到的所以符合條件的投資項目列表,現在對這個列表進行去重。
我們取出多余字段,並將有關字段拼裝成字符串形式來進行模擬:比如"1.1-20"表示利率為1.1%,進度為20%的項目。
下面貼出實現算法:(主要就是關於List的去重問題)
1 public staticvoid 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去重問題的解決方案