删除list列表中的某一个元素的多种方法
阅读原文时间:2021年07月18日阅读:5

当我们在处理业务的时候,很多情况下数据都要进行一层层的过滤,最近需要给一个列表中去除不符合条件的元素,

本来觉着挺简单的,Google了下发现很多方法都是旧方法,根本不符合我的需求。

于是参考着网上的方法自己写了几个方法

1 .Iterator 去除

Iterator 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);  
}

完整代码

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章