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

  當咱們在處理業務的時候,不少狀況下數據都要進行一層層的過濾,最近須要給一個列表中去除不符合條件的元素,ide

原本覺着挺簡單的,Google了下發現不少方法都是舊方法,根本不符合個人需求。性能

因而參考着網上的方法本身寫了幾個方法spa

1 .Iterator 去除code

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

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

這不太符合個人代碼風格   先pass索引

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

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

這時候忽然就想起了流  雖然用的很少  可是很喜歡這種風格get

用流怎麼處理這個問題呢it

不用說確定先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);
    }
完整代碼
相關文章
相關標籤/搜索