删除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);
}
完整代码
删除list列表中的某一个元素的多种方法的更多相关文章
- python 按多维列表中的某一个元素位进行排序
import os,re top = os.popen("tasklist") process_list = [] split_r = r"\s+" memor ...
- [java]删除数组中的某一个元素
package org.company.project.test; import java.util.Arrays; import java.util.Scanner; public class Ar ...
- 查询无序列表中第K小元素
当需要在无需列表中寻找第k小的元素时,一个显然的方法是将所有数据进行排序,然后检索k个元素.这种方法的运行时间为O(n log(n)). 无序列表调用分区函数将自身分解成两个子表,其长度为i和n-i. ...
- 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5* ...
- LR 取到怎么样才能得到参数列表中的每一个值
char *m="e"; lr_save_string("helloworld","p4"); lr_eval_string("{ ...
- java 从List中随机取出一个元素
java 从List中随机取出一个元素 List<Integer> list = new ArrayList<>(); Random random = new Random() ...
- JS window对象 返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL。
返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL. 如果倒退之后,再想回到倒退之前浏览的页面,则可以使用forward()方法,代码如下: window.hi ...
- c# asp.net core取当月第一天和最后一天及删除最后一个字符的多种方法
当月第一天0时0分0秒 DateTime.Now.AddDays( - DateTime.Now.Day).Date 当月最后一天23时59分59秒 DateTime.Now.AddDays( - D ...
- 给ul中的li添加事件的多种方法
给ul中的li添加事件的多种方法 这是一个常见,而且典型的前端面试题 <ul> <li>11111</li> <li>22222</li> ...
随机推荐
- Java学习的第三十六天
1.2.1 public class cjava { public static void main(String[]args) { int a,b; a='A'; b='B'; System.out ...
- Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON字符串增加额外字段 假如我们有这样结 ...
- 我叫MongoDb,不懂我的看完我的故事您就入门啦!
这是mongo基础篇,后续会连续更新4篇 大家好我叫MongoDb,自从07年10月10gen团队把我带到这个世界来,我已经13岁多啦,现在越来越多的小伙伴在拥抱我,我很高兴.我是NoSQL大家族的一 ...
- Javasript中this指向问题和改变this指向的方法
在学习javascript中我们往往会被this的指向问题弄的头昏转向,今天我们就来学习一下this的指向问题,和改变this指向的方法. 一.this的指向问题 在学习this的指向问题之前我们需要 ...
- 蒲公英 · JELLY技术周刊 Vol.29: 前端智能化在阿里的那些事
蒲公英 · JELLY技术周刊 Vol.29 前端智能化是指借助于 AI 和机器学习的能力拓展前端,使其拥有一些超出现阶段前端能力的特性,这将是未来前端方向中一场重要的变革.目前各家互联网厂商都有自己 ...
- B/S图书管理系统
B/S图书管理系统 系统管理 ①新用户注册 ②用户信息修改:修改信息,修改密码 ③锁定用户 ④注销用户 书籍管理 ①新书入库 ②借书办理 ③还书办理 ④书记注销 个人管理 ①图书查询 ②借书单查询 ③ ...
- Redis快速入门教程
1.Redis介绍 Redis说白了就是个存放Key-Value数据接口的内存存储系统,主要用作数据库缓存和消息代理. 内部支持sring,hash,list,set,sorted-set五种数据结构 ...
- 内网渗透 day4-meterpreter基本命令
meterpreter基本命令 目录 1.getuid 查看当前用户 1 2.getpid 查看当前的进程id 1 3.getsystem 初步提权 1 4.ps 1.查看进程列表2.帮助我们获取pi ...
- 02模板渲染和参数(补充:URL传参到视图)
先抛出代码: @app.route('/') def index(): return render_template('index.html',username ="郑勇") 问题 ...
- Docker - 解决运行容器报 WARNING: IPv4 forwarding is disabled. Networking will not work. 的问题
问题背景 执行运行容器的命令 docker run -d -uroot -p 8080:8080 --name jenkins2 -v /var/jenkins_node/:/var/jenkins_ ...