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

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

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

1 .Iterator 去除

  1. 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 去除

  1. admVipConfigs.stream().findFirst().map(vo -> {
    if (vo.getVipName().equals("注册会员")){
    admVipConfigs.remove(vo);
    }
    return vo;
    });
    没有改变我的list格式并且更简洁,看着还是比较满意的
    但是流处理的时候remove的时候会再次遍历整个list来找出
    这个元素,性能会有一定的损耗,这怎么能行,我肉眼能看到的
    损耗都是垃圾代码(除非没时间改)

    既然这样 我们只能给它加个索引了

    3 stream + 索引 去除

  1. IntStream.range(0,admVipConfigs.size()).filter(i->
    admVipConfigs.get(i).getVipName().equals("金卡会员")).
    boxed().findFirst().map(i->admVipConfigs.remove((int)i));

    其中boxed为装箱操作
    好像又简洁了点,没错 要的就是这个了!
  1. // 去除list中的某一个元素
  2. @Test
  3. public void bb(){
  4. String vipName[] = {"注册会员", "金卡会员", "铂金会员", "钻石会员", "至尊会员", "超级会员"};
  5.  
  6. List<AdmVipConfigs> admVipConfigs=new ArrayList<>();
  7. for (int i = 1; i < 7; i++) {
  8. AdmVipConfigs admVipConfig = new AdmVipConfigs();
  9. admVipConfig.setVipId(i);
  10. admVipConfig.setVipDel(0);
  11. admVipConfig.setVipDefaultValue(0);
  12. admVipConfig.setVipOrderNo(i);
  13. if (i == 1) {
  14. admVipConfig.setVipStatus(0);
  15. } else {
  16. admVipConfig.setVipStatus(1);
  17. }
  18. admVipConfig.setVipCondition(0);
  19. admVipConfig.setVipName(vipName[i - 1]);
  20. admVipConfigs.add(admVipConfig);
  21. }
  22. admVipConfigs.stream().findFirst().map(vo -> {
  23. if (vo.getVipName().equals("注册会员")){
  24. admVipConfigs.remove(vo);
  25. }
  26. return vo;
  27. });
  28. IntStream.range(0,admVipConfigs.size()).filter(i->
  29. admVipConfigs.get(i).getVipName().equals("金卡会员")).boxed().findFirst().map(i->admVipConfigs.remove((int)i));
  30.  
  31. Iterator<AdmVipConfigs> iterator = admVipConfigs.iterator();
  32. while (iterator.hasNext()){
  33. AdmVipConfigs next = iterator.next();
  34. String vipName1 = next.getVipName();
  35. if (vipName1.equals("铂金会员")){
  36. iterator.remove();
  37. }
  38. }
  39.  
  40. System.out.println(admVipConfigs);
  41. }

完整代码

删除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. VisualCalendar-可视化日历的创建

    public class VisualCalendar { public static void main(String[]args){ System.out.println("请输入日期( ...

  2. Java学习的第三十三天

    1.今天复习了第十二章的12.1的文件和12.2一直到12.2.4 2.没有问题 3.明天继续复习

  3. 使用 IDEA 查看 JDK8 源码

    使用 idea 查看 oracle jdk 8 源码时发现 Unsafe 没有源码. 解决方法: 到 openjdk-8 下载页面:http://jdk.java.net/java-se-ri/8-M ...

  4. [Luogu P3157][CQOI2011]动态逆序对 (树套树)

    题面 传送门:[CQOI2011]动态逆序对 Solution 一开始我看到pty巨神写这套题的时候,第一眼还以为是个SB题:这不直接开倒车线段树统计就完成了吗? 然后冷静思考了一分钟,猛然发现单纯的 ...

  5. 面试小问题——Object中有哪些常用方法?

    一.equals方法 Object类中的equals方法用于检测一个对象是否等于另外一个对象.Java语言规范要求equals方法具有下面的特性: (1)自反性:对于任何非空引用x,x.equals( ...

  6. 在springmvc.xml中定义全局的异常处理

    在Controller类的内部方法上使用@ExceptionHandler,则此类的方法抛出未处理的异常时,回到此方法上处理. @ExceptionHandler可以指定异常的类型,会自动进行匹配 如 ...

  7. PHP 教程:Composer 最佳实践

    概述 Composer 是 PHP 应用程序的依赖管理器,最初发布于大约 8 年前,2012 年 3 月. 在 php 中使用 Composer 可以提高代码的可重用性,并使你的项目能够轻松地集成来自 ...

  8. leetcode75:search-a-2d-matrix

    题目描述 请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征: 每一行的数字都从左到右排序 每一行的第一个数字都比上一行最后一个数字大 例如: 对于下面的矩阵: [ [1, 3, ...

  9. Java设计系列之书店管理系统单机版

    书店管理系统: 项目练习目标 :1.Java应用程序基本分析2.培养面向对象编程的基本思想3.Java基本设计模式综合应用4.掌握分层和接口的基本设计5.构建合理的Java应用程序包结构6.综合应用J ...

  10. 《精通Spring4.x企业应用开发实战》第三章

    这一章节主要介绍SpringBoot的使用,也是学习的重点内容,之后就打算用SpringBoot来写后台,所以提前看一下还是很有必要的. 3.SpringBoot概况 3.1.1SpringBoot发 ...