當咱們在處理業務的時候,不少狀況下數據都要進行一層層的過濾,最近須要給一個列表中去除不符合條件的元素,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); }