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

本来觉着挺简单的,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);
}

完整代码

删除list列表中的某一个元素的多种方法的更多相关文章

  1. python 按多维列表中的某一个元素位进行排序

    import os,re top = os.popen("tasklist") process_list = [] split_r = r"\s+" memor ...

  2. [java]删除数组中的某一个元素

    package org.company.project.test; import java.util.Arrays; import java.util.Scanner; public class Ar ...

  3. 查询无序列表中第K小元素

    当需要在无需列表中寻找第k小的元素时,一个显然的方法是将所有数据进行排序,然后检索k个元素.这种方法的运行时间为O(n log(n)). 无序列表调用分区函数将自身分解成两个子表,其长度为i和n-i. ...

  4. 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

    当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5*  ...

  5. LR 取到怎么样才能得到参数列表中的每一个值

    char *m="e"; lr_save_string("helloworld","p4"); lr_eval_string("{ ...

  6. java 从List中随机取出一个元素

    java 从List中随机取出一个元素 List<Integer> list = new ArrayList<>(); Random random = new Random() ...

  7. JS window对象 返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL。

    返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL. 如果倒退之后,再想回到倒退之前浏览的页面,则可以使用forward()方法,代码如下: window.hi ...

  8. c# asp.net core取当月第一天和最后一天及删除最后一个字符的多种方法

    当月第一天0时0分0秒 DateTime.Now.AddDays( - DateTime.Now.Day).Date 当月最后一天23时59分59秒 DateTime.Now.AddDays( - D ...

  9. 给ul中的li添加事件的多种方法

    给ul中的li添加事件的多种方法 这是一个常见,而且典型的前端面试题 <ul> <li>11111</li> <li>22222</li> ...

随机推荐

  1. DTU是怎么与PLC连接通信的

    数据采集是生产制造中最实际最频繁的需求,不管智能设备制造发展到何种程度它都是工业4.0的先决条件,也在数字化工厂当中,工人更多地是处理异常情况,调整设备.但数据采集一直是困扰着所有制造工厂的传统痛点, ...

  2. shell脚本之字符串测试表达式

    1.字符串测试操作符 字符串测试操作符的作用有:比较两个字符串是否相同.字符串的长度是否为零,字符串是否为NULL(注:bash区分零长度字符串和空字符串等) 下表为常用字符串操作符 也可以通过man ...

  3. 通过Portwigge的Web安全漏洞训练平台,学习SSRF

    前言 Portswigger是Burpsuite的官网,也是一个非常好的漏洞训练平台.其Web安全靶场地址为:https://portswigger.net/web-security/ 该靶场的训练内 ...

  4. display:none;visibility:hidden;opacity:0;之间的区别

    什么是回流 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建.这就称为回流(reflow).每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是 ...

  5. .Net Newtonsoft.Json 转json时将枚举转为字符串

    1:非列表类型枚举 [JsonConverter(typeof(StringEnumConverter))] public SubjectTypeEnum subject_type { get; se ...

  6. 2012年游戏软件开发独立本科段01B0815自考科目教材

    代码-----------教材名----------------------------版本----------作者 03708--------中国近现代史纲要----------------高教08 ...

  7. MySql Binlog 说明 & Canal 集成MySql的更新异常说明 & MySql Binlog 常用命令汇总

    文章来源于本人的印象笔记,如出现格式问题可访问该链接查看原文 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 目录 背景介绍 开启MySq ...

  8. python之 《进程之间数据交互和进程池》

    1.进程q 进程呢就相当于一个房子,线程就相当于是房子里面在工作的人,那么一个房子的空间对于房子里面的人来说是共享的, 现在是多进程,也就是说有许多房子,很显然这个房子的空间只属于这个房子,不会属于其 ...

  9. java网络编程socket的使用

    Socket 客户端实例 如下的 GreetingClient 是一个客户端程序,该程序通过 socket 连接到服务器并发送一个请求,然后等待一个响应. GreetingClient.java 文件 ...

  10. Apache POI读写Excel

    Apache POI是Apache软件基金会的开放源码函式库,POIAPI给Java程序对Microsoft Office格式档案读和写的功能. 官方文档 [https://poi.apache.or ...