Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法,该方法将会批量删除符合 filter 条件的所有元素。该方法需要一个 Predicate 对象作为参数,Predicate 也是函数式接口,因此可使用 Lambda 表达式作为参数。

如下程序示范了使用 Predicate 来过滤集合。

public class ForeachTest {

public static void main(String[] args) {

// 创建一个集合

Collection objs = new HashSet();

objs.add(new String("C语言中文网Java教程"));

objs.add(new String("C语言中文网C++教程"));

objs.add(new String("C语言中文网C语言教程"));

objs.add(new String("C语言中文网Python教程"));

objs.add(new String("C语言中文网Go教程"));

// 使用Lambda表达式(目标类型是Predicate)过滤集合

objs.removeIf(ele -> ((String) ele).length() < 12);

System.out.println(objs);

}

}

上面程序中第 11 行代码调用了 Collection 集合的 removeIf() 方法批量删除集合中符合条件的元素,程序传入一个 Lambda 表达式作为过滤条件。所有长度小于 12 的字符串元素都会被删除。编译、运行这段代码,可以看到如下输出:

[C语言中文网Java教程, C语言中文网Python教程]

使用 Predicate 可以充分简化集合的运算,假设依然有上面程序所示的 objs 集合,如果程序有如下三个统计需求:

统计集合中出现“C语言中文网”字符串的数量。

统计集合中出现“Java”字符串的数量。

统计集合中出现字符串长度大于 12 的数量。

此处只是一个假设,实际上还可能有更多的统计需求。如果采用传统的编程方式来完成这些需求,则需要执行三次循环,但采用 Predicate 只需要一个方法即可。下面代码示范了这种用法。

public class ForeachTest2 {

public static void main(String[] args) {

// 创建一个集合

Collection objs = new HashSet();

objs.add(new String("C语言中文网Java教程"));

objs.add(new String("C语言中文网C++教程"));

objs.add(new String("C语言中文网C语言教程"));

objs.add(new String("C语言中文网Python教程"));

objs.add(new String("C语言中文网Go教程"));

// 统计集合中出现“C语言中文网”字符串的数量

System.out.println(calAll(objs, ele -> ((String) ele).contains("C语言中文网")));

// 统计集合中出现“Java”字符串的数量

System.out.println(calAll(objs, ele -> ((String) ele).contains("Java")));

// 统计集合中出现字符串长度大于 12 的数量

System.out.println(calAll(objs, ele -> ((String) ele).length() > 12));

}

public static int calAll(Collection books, Predicate p) {

int total = 0;

for (Object obj : books) {

// 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件

if (p.test(obj)) {

total++;

}

}

return total;

}

}

输出结果为:

5 1 1

上面程序先定义了一个 calAll() 方法,它使用 Predicate 判断每个集合元素是否符合特定条件,条件将通过 Predicate 参数动态传入。从上面程序中第 11、13、15 行代码可以看到,程序传入了 3 个 Lambda 表达式,其目标类型都是 Predicate,这样 calAll() 方法就只会统计满足 Predicate 条件的图书。

java new collection_使用Java 8新增的Predicate操作Collection集合相关推荐

  1. Java工作笔记-JPA中Repository新增自定义更新操作

    这里因为某种自定义业务,需要自己写sql语句进行更新. 或者某方言集不能用,需要对其进行手都更新. 对此记录下. 对应代码如下: @Repository public interface Table1 ...

  2. java list 两个集合比较 不存在则新增 存在修改_Java之集合

    在许多应用场合,一组数据的长度不是固定的,比如一个单位的员工数目是变化的,有老员工跳槽,也有新员工进来. 为了使程序能够方便的存储和操纵数目不固定的一组数据,JDK类库提供了Java集合,位于java ...

  3. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  4. java中遍历collection_使用Java中的Iterator遍历Collection

    Java中的集合提供了一种处理一组对象的体系结构.Java集合框架中的不同类是ArrayList,LinkedList,HashSet,Vector等. 迭代器可用于遍历Collection,使用Ar ...

  5. Java基础篇:Java集合

    文章目录 1.概述 2.Collection接口 2.1 Collection接口方法 2.2 Iterator迭代器接口 2.3 Collection子接口之:List接口 2.4 Collecti ...

  6. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

  7. 从 Java 9 开始,Java 就华丽的转身为微服务了…

    继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...

  8. java接口有非抽象方法_[Java教程]纳尼,java可以在接口中实现非抽象方法了?

    [Java教程]纳尼,java可以在接口中实现非抽象方法了? 0 2016-09-17 18:00:20 纳尼,接口中可以定义实例方法了?! 纳尼,接口中还可以定义静态方法了?! 没错,在Java8中 ...

  9. java condition_死磕Java并发:J.U.C之Condition

    在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait().notify()系列方法可以实现等待/通知模式.在Java SE5后,Java提供了Lock接口,相对于 ...

最新文章

  1. java BlockingQueue 用法
  2. GDCM:gdcm::Decoder的测试程序
  3. 面试中常问的HTTP/1.0状态码
  4. 如何在SAP Spartacus category 页面里拿到当前的category信息
  5. 【Python CheckiO 题解】Best Stock
  6. Spring事务传播行为7种类型 --- 看一遍就能记住!
  7. js:语言精髓笔记12--动态语言特性(2)
  8. 智能排班系统、班次、班表、考勤、年假、调休、审批、请假、培训、值班、换班、加班、工时、自动排班、智能预测、人力需求预测、授权、团队、锁定量排、规则权重设置、菜单、角色、数据监控、工作台、axure
  9. Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
  10. Android系统中用C语言来编写服务程序并且开机自启动运行服务
  11. jdk版本问题:hour_day_of 0 -1
  12. win10重置mysql密码是多少钱_Win10重置mariadb密码步骤
  13. SEO基础知识简介(一)
  14. Linux实战教学笔记53:开源虚拟化KVM(一)搭建部署与概述
  15. npm 同时安装同一个包的不同版本(npm@6.9 alias)
  16. KMP算法的应用——碱基序列匹配
  17. Arturia V Collection 9 for mac - Arturia系列合成器合集
  18. 已成功拿下字节、腾讯、脉脉offer,这原因我服了
  19. 小南说 Promise(是什么,有什么,怎么用,为什么)
  20. Arduino 水滴检测

热门文章

  1. 原生Js_实现广告弹窗
  2. 第八模块:算法设计模式、企业应用 第2章 企业应用工具学习
  3. bzoj4245: [ONTAK2015]OR-XOR
  4. 使用pssh进行并行批量操作
  5. CefSharp试用
  6. JavaScript——变量与基本数据类型
  7. 仿微信朋友圈项目梳理
  8. 洛谷 题解 P2010 【回文日期】
  9. Hyperledger Fabric区块链工具configtxgen配置configtx.yaml
  10. const和define 区别