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("中文百度搜索Java教程"));objs.add(new String("中文百度搜索C++教程"));objs.add(new String("中文百度搜索C语言教程"));objs.add(new String("中文百度搜索Python教程"));objs.add(new String("中文百度搜索Go教程"));// 使用Lambda表达式(目标类型是Predicate)过滤集合objs.removeIf(ele -> ((String) ele).length() < 12);System.out.println(objs);}
}

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

[中文百度搜索Java教程, 中文百度搜索Python教程]

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

 统计集合中出现“中文百度搜索”字符串的数量。统计集合中出现“Java”字符串的数量。统计集合中出现字符串长度大于 12 的数量。

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

public class ForeachTest {public static void main(String[] args) {// 创建一个集合Collection objs = new HashSet();objs.add(new String("中文百度搜索Java教程"));objs.add(new String("中文百度搜索C++教程"));objs.add(new String("中文百度搜索C语言教程"));objs.add(new String("中文百度搜索Python教程"));objs.add(new String("中文百度搜索Go教程"));// 统计集合中出现“中文百度搜索”字符串的数量System.out.println(calAll(objs, ele -> ((String) ele).contains("中文百度搜索")));// 统计集合中出现“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 条件的图书。

使用Predicate操作Collection集合相关推荐

  1. 1.13 Predicate操作Collection集合

    使用Java 8新增的Predicate操作Collection集合 Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法,该方法将会批 ...

  2. java new collection_使用Java 8新增的Predicate操作Collection集合

    Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法,该方法将会批量删除符合 filter 条件的所有元素.该方法需要一个 Predic ...

  3. 1.14 Stream操作Collection集合

    使用Java 8新增的Stream操作Collection集合 Java 8 还新增了 Stream.IntStream.LongStream.DoubleStream 等流式 API,这些 API ...

  4. Stream操作Collection集合

    独立使用 Stream 的步骤如下: 1 . 使用 Stream 或 XxxStream 的 builder() 类方法创建该 Stream 对应的 Builder. 2 . 重复调用 Builder ...

  5. Java8新特性总结 -5.Stream API函数式操作流元素集合

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  6. Collection集合入门

    集合 集合的概念: 集合和数组类似,是一个数组容器,用来存储引用数据类型的数据,在Java中,集合不是泛指某一个类,而是若干个类组成的数据结构的实现 Java的集合类是Java.util包中的重要内容 ...

  7. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  8. 5.Collection集合 List集合 泛型

    一.Collection集合 1.1 数组和集合的区别 相同点:都是容器,可以存储多个数据. 不同点: 数组的长度是不可变的,集合的长度是可变的. 数组可以存基本数据类型和引用数据类型:集合只能存引用 ...

  9. plsql 循环存储过程返回数据集合_Java基础(十五)——Collection集合、泛型 - 寒江雨

    Collection集合 集合概述 集合:集合是Java中提供的一种容器,可以用来存储多个数据 数组的长度是固定的,集合的长度是可变的 数组中存储的是同一种数据类型的元素,可以存储基本数据类型也可以存 ...

最新文章

  1. 什么原因导致芯片短路_常见的芯片故障现象
  2. docker环境无法执行jmap -heap 56命令
  3. MySQL数据库创建及删除操作
  4. volatile实现禁止指令重排底层操作原理
  5. 一文详解超参数调优方法
  6. ubuntu7.10下的vi用的怪怪的
  7. supervisor 子进程退出_用supervisor监管你的程序,不用担心程序挂了
  8. CA服务器的安装和学习.
  9. poj Shortest Prefixes ——trie树、字典树,基础!!
  10. 基于MATLAB OCR的发票识别系统
  11. 单片机原理与应用复习
  12. 带你了解IP地址的计算
  13. 语音社交APP系统开发,提供纯粹的语音社交
  14. 题目 2291: [蓝桥杯][2018年第九届真题]调手表(BFS)
  15. python的注释符号有哪些_python注释符号
  16. 信息流推广与普通搜索推广的区别与优势是什么?
  17. 树状数组的理解以及简单应用
  18. 汽车手机互联一键启动手机撑控
  19. ECHO、IF、REM等命令介绍
  20. 舞台灯光计算机控制,舞台灯光的操作

热门文章

  1. 计算机网络互联设备功能,计算机网络互联设备简介
  2. java asynchronize_Java 中synchronize函数的实例详解
  3. 傲游浏览器语言怎么切换 傲游浏览器语言切换方法简述
  4. 新版微软Edge浏览器:支持安装Chrome扩展
  5. 腾讯视频app官方下载_腾讯视频怎么快进
  6. 如何理解面向过程和面向对象?
  7. RTMP/RTSP推送端和RTMP/RTSP播放端录像设计探讨
  8. edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...
  9. 电脑设置访问苹果服务器未响应,苹果连接电脑没反应,教您苹果连接电脑没反应怎么解决...
  10. Redis Scan 命令