刪除list列表中的某一個元素的多種方法


  當我們在處理業務的時候,很多情況下數據都要進行一層層的過濾,最近需要給一個列表中去除不符合條件的元素,

本來覺着挺簡單的,Google了下發現很多方法都是舊方法,根本不符合我的需求。

於是參考着網上的方法自己寫了幾個方法

1 .Iterator 去除

Iterator<AdmVipConfigs> iterator = admVipConfigs.iterator();
while (iterator.hasNext()){
AdmVipConfigs next = iterator.next();
String vipName1 = next.getVipName();
if (vipName1.equals("鉑金會員")){
iterator.remove();
}
}

雖然也能去除  但是列表改造成 Iterator 類型的了  (還要轉換  不喜歡 )

這不太符合我的代碼風格   先pass

又換了幾種比較舊的轉換方式   發現缺陷都不小(麻煩)

這時候不能再跟着舊思路走了 必須自己想個好方法了

這時候突然就想起了流  雖然用的不多  但是很喜歡這種風格

用流怎么處理這個問題呢

不用說肯定先Google

然后發現流確實能處理 而且更強大(好看)

2 stream 去除

admVipConfigs.stream().findFirst().map(vo -> {
if (vo.getVipName().equals("注冊會員")){
admVipConfigs.remove(vo);
}
return vo;
});
沒有改變我的list格式並且更簡潔,看着還是比較滿意的
但是流處理的時候remove的時候會再次遍歷整個list來找出
這個元素,性能會有一定的損耗,這怎么能行,我肉眼能看到的
損耗都是垃圾代碼(除非沒時間改)

既然這樣 我們只能給它加個索引了

3 stream + 索引 去除

IntStream.range(0,admVipConfigs.size()).filter(i->
admVipConfigs.get(i).getVipName().equals("金卡會員")).
boxed().findFirst().map(i->admVipConfigs.remove((int)i));

其中boxed為裝箱操作
好像又簡潔了點,沒錯 要的就是這個了!
 //  去除list中的某一個元素
    @Test
    public void bb(){
        String vipName[] = {"注冊會員", "金卡會員", "鉑金會員", "鑽石會員", "至尊會員", "超級會員"};

        List<AdmVipConfigs> admVipConfigs=new ArrayList<>();
        for (int i = 1; i < 7; i++) {
            AdmVipConfigs admVipConfig = new AdmVipConfigs();
            admVipConfig.setVipId(i);
            admVipConfig.setVipDel(0);
            admVipConfig.setVipDefaultValue(0);
            admVipConfig.setVipOrderNo(i);
            if (i == 1) {
                admVipConfig.setVipStatus(0);
            } else {
                admVipConfig.setVipStatus(1);
            }
            admVipConfig.setVipCondition(0);
            admVipConfig.setVipName(vipName[i - 1]);
            admVipConfigs.add(admVipConfig);
        }
        admVipConfigs.stream().findFirst().map(vo -> {
            if (vo.getVipName().equals("注冊會員")){
                admVipConfigs.remove(vo);
            }
            return vo;
        });
        IntStream.range(0,admVipConfigs.size()).filter(i->
            admVipConfigs.get(i).getVipName().equals("金卡會員")).boxed().findFirst().map(i->admVipConfigs.remove((int)i));

        Iterator<AdmVipConfigs> iterator = admVipConfigs.iterator();
        while (iterator.hasNext()){
            AdmVipConfigs next = iterator.next();
            String vipName1 = next.getVipName();
            if (vipName1.equals("鉑金會員")){
                iterator.remove();
            }
        }

        System.out.println(admVipConfigs);
    }
完整代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM