今天偶然间发现了Collection在1.8新增了一个removeIf(Predicate<? super E> filter)方法,能够实现面试官们常问的:如何一边遍历,一边删除。
首先是源码:

/*** Removes all of the elements of this collection that satisfy the given* predicate.  Errors or runtime exceptions thrown during iteration or by* the predicate are relayed to the caller.** @implSpec* The default implementation traverses all elements of the collection using* its {@link #iterator}.  Each matching element is removed using* {@link Iterator#remove()}.  If the collection's iterator does not* support removal then an {@code UnsupportedOperationException} will be* thrown on the first matching element.** @param filter a predicate which returns {@code true} for elements to be*        removed* @return {@code true} if any elements were removed* @throws NullPointerException if the specified filter is null* @throws UnsupportedOperationException if elements cannot be removed*         from this collection.  Implementations may throw this exception if a*         matching element cannot be removed or if, in general, removal is not*         supported.* @since 1.8*/
default boolean removeIf(Predicate<? super E> filter) {Objects.requireNonNull(filter);boolean removed = false;final Iterator<E> each = iterator();while (each.hasNext()) {if (filter.test(each.next())) {each.remove();removed = true;}}return removed;}

源码中注释很长,但是相信大家就能看出新增方法的作用了。删除集合中满足给定条件的所有元素
接下来模拟需求是:筛选掉所有没给我点赞的用户[护住狗头]
上代码:

import java.util.*;
import java.util.function.Predicate;public class Demo {Demo(){}class User{private int id;private String name;private boolean like;public User(){}public User(int id,String name,boolean like){this.id = id;this.name = name;this.like = like;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean getLike() {return like;}public void setLike(boolean like) {this.like = like;}@Overridepublic String toString(){return "User{" +"id=" + id +", name='" + name + '\'' +", like=" + like +'}';}}public static void main(String[] args) {Demo demo = new Demo();List<User> list = new ArrayList<>();list.add(demo.new User(1,"张三",true));list.add(demo.new User(2,"李四",false));list.add(demo.new User(3,"王五",true));list.add(demo.new User(4,"赵六",false));// 1.常规方式/* list.removeIf(new Predicate<User>(){@Overridepublic boolean test(User user){return false == user.getVip();}});*/// 2.使用lambda表达式(推荐)list.removeIf(user -> false == user.getLike());System.out.println(list.toString());}
}

[User{id=1, name=‘张三’, like=true}, User{id=3, name=‘王五’, like=true}]

以上,就把没点赞的用户全都筛选出去了。是不是so easy![护住狗头]

List.removeIf():删除集合中满足给定条件的所有元素相关推荐

  1. 【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )

    文章目录 一.使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 1.闭包中使用 == 作为 findAll 方法的查找匹配条件 2.闭包中使用 is 作为 findAll 方法的查找匹 ...

  2. 删除集合中特定元素的几种情况

    从集合中删除元素一直是一个比较容易遗漏的知识点,今天来给大家介绍一下删除集合​​中特定元素的一些情况. ​(一)List如何实现遍历删除 以ArrayList为例 List<String> ...

  3. python删除元素del 可以删除部分元素吗_可以使用del删除集合中的部分元素。

    [判断题]Python集合可以包含相同的元素.(3.0分) [单选题]student = dict(姓名='张三', 年龄=20, 性别='男'),则student.get("name&qu ...

  4. java集合:删除集合中的信息

    在上一节创建的集合中,想要删除某条信息:使用set.remove() //删除花花的信息后并输出 for(Cat cat:set){ //增强型for循环if(cat.getName().equals ...

  5. PageCollectionView[Bug],使用Filter的时候,删除集合中的元素,会导致ArgumentOutOfRangeException...

    PageCollectionView,没有使用Filter的时候一切正常:当使用Filter的时候,删除集合中的元素,会抛出如下异常: 1: 指定的参数已超出有效值的范围.\n参数名: index 2 ...

  6. 循环的时候去删除集合中的元素 java.util.ConcurrentModificationException

    使用for循环,删除集合中的元素,会报错 java.util.ConcurrentModificationException 只能通过迭代器 iterator删除 1:在while循环中使用itera ...

  7. java删除集合元素吗_java如何删除集合中的元素

    java如何删除集合中的元素 如何使用java删除集合中的'元素呢?下面是小编给大家提供的删除集合中元素的常见方法,欢迎阅读,更多详情请关注应届毕业生考试网. Java代码如下: package co ...

  8. Java 删除集合中指定的元素

    使用 Collection 类的 collection.remove() 方法来删除集合中的指定的元素 完整代码 import java.util.*;public class Main {publi ...

  9. vue中如何在方法中动态的删除集合中的元素!?

    参考https://blog.csdn.net/weixin_42230550/article/details/87990486 vue中,如何在方法中动态的删除集合中的元素? me.btn_elem ...

最新文章

  1. LeetCode中等题之二倍数对数组
  2. 飞书×品玩邀请多位行业大咖,共谈跨境企业“战疫”秘籍!
  3. Linux修改/etc/profile配置错误command is not found自救方法
  4. python语言介绍-Python这门语言的大概介绍
  5. 你不知道的Python的输入输出
  6. BCB6.0里没有TCppWebBrowser
  7. CentOS6.5下安装iRedMail中需要解决的问题
  8. Eclipse日常踩坑记录——导入文件时遇到的几个问题
  9. WPF 美化界面,样式的使用
  10. oracle查看所有用户6,CSS_Oracle 用户权限查询,1.查看所有用户:nb - phpStudy
  11. 日语输入法 android8.0,百度日文输入法
  12. js利用数组创建图片对象
  13. HOJ 1568 Fibonacci(对数,数列通项公式)
  14. 视频压缩大小怎么做?压缩视频用这3个工具准没错!
  15. 关于将txt文件中的数据批量添加到excel中,显示不全的问题
  16. 全国大学生数学竞赛公式(全)
  17. MATLAB imresize函数的用法
  18. python之excel读写报表统计入门
  19. 天圆地方· 围棋界的盲棋天才 -- 鲍云
  20. ANSYS APDL学习(8):选取全部的封闭曲面生成实体(体积)的命令流讲解

热门文章

  1. Ps 初学者教程「66」如何在照片中删除和添加对象?
  2. 怎么测试网络稳定性_权威评测报告发布,移动领跑江苏地区5G网络
  3. Bluestacks蓝叠安卓模拟器与PC电脑怎么传文件
  4. 【深度学习训练之Batch】
  5. 计算机游戏配机方案,小白不会装机怎么办?2021年最佳游戏PC整机配置一览
  6. 使用学校论文world模板,使用endnote插入文献时,world闪退
  7. H3C模拟器LITO 连接 本地网卡
  8. Vehicle Spy3软件常用功能之实时监控总线报文
  9. 逃逸分析--代码三大优化策略(堆不是分配对象存储的唯一选择)
  10. 北京理工大学在职计算机博士,北京理工大学在职博士是双证吗