使用Java 8新增的Predicate操作Collection集合

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

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

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;public class Test {public static void main(String[] args) {//创建一个集合Collection objs=new HashSet();objs.add("111111111");objs.add("22222222");objs.add("3333333");objs.add("444444");objs.add("55555");objs.removeIf(ele -> ((String)ele).length()<=6);System.out.println(objs);}}

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

[3333333, 111111111, 22222222]

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

  • 统计集合中出现“英雄联盟”字符串的数量。
  • 统计集合中出现“养爹人”字符串的数量。
  • 统计集合中出现字符串长度大于 7 的数量。

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

import java.util.Collection;
import java.util.HashSet;
import java.util.function.Predicate;public class Test {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;}public static void main(String[] args) {//创建一个集合Collection objs=new HashSet();objs.add("英雄联盟佐伊");objs.add("英雄联盟拉克丝");objs.add("英雄联盟万花通灵");objs.add("英雄联盟时光守护者");objs.add("英雄联盟峡谷养爹人");// 统计集合中出现“英雄联盟”字符串的数量System.out.println(calAll(objs, ele -> ((String) ele).contains("英雄联盟")));// 统计集合中出现“养爹人”字符串的数量System.out.println(calAll(objs, ele -> ((String)ele).contains("养爹人")));// 统计集合中出现字符串长度大于 7 的数量System.out.println(calAll(objs, ele -> ((String) ele).length() > 7));}}

输出结果为:

5 1 3

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

1.13 Predicate操作Collection集合相关推荐

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

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

  2. 使用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. 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 ...

  6. Java SE基础知识详解第[13]期—不可变集合、Stream流、异常

    写在前面: 每一个不曾起舞的日子,都是对生命的辜负. 希望看到这里的每一个人都能努力学习,不负韶华,成就更好的自己. 以下仅是个人学习过程中的一些想法与感悟,Java知识博大精深,作为初学者,个人能力 ...

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

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

  8. collection集合 多少钱_面试必备-Java集合框架

    Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...

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

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

最新文章

  1. 【转载】让我们来FirePHP
  2. python中的列表分片详解_python列表与元组详解实例
  3. 使用kubectl管理k8s集群(三十)
  4. oracle创建public链接,如何在oracle直接使用地址来创建database link
  5. CSS的三种定位,成功入职字节跳动
  6. 西河某人_如何使用增强现实祝某人生日快乐
  7. macaca使用中问题解决方法整理
  8. http://java.sun.com/jsp/jstl/core cannot be resolved(含有jstl1.2jar包网盘)
  9. 随想录(如何学习内核)
  10. Linux内核入门(二)——用户态向内核态切换
  11. java自己写的网络爬虫
  12. 《神经科学:探索脑》学习笔记(合集)
  13. 【网络流24题】火星探险问题
  14. ManageEngine云ITSM系统助斯德雷特(Sterlite)年处理5万个工单
  15. python元组是什么意思_python元组是什么意思
  16. 电子与通信工程专硕考分_分享我的苏州大学电子与通信工程专硕考研经历
  17. ubuntu分区时主分区和逻辑分区怎么分
  18. 算法——和为K的连续子数组
  19. CA410_SDK测试及读数软件
  20. trunc_normal = lambda stddev: tf.truncated_normal_initializer(0.0, stddev)解析

热门文章

  1. DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介、应用、经典案例之详细攻略
  2. Windows Phone 7.1 Sensor プログラミング基礎
  3. mariadb数据库备份与恢复
  4. 关于ML.NET v0.7的发布说明
  5. Tomcat 中文乱码 设置UTF-8编码 问题解决办法
  6. Web前端知识技能大汇总
  7. 离线安装ADT和sdk
  8. Java集合:HashMap源码剖析
  9. AS3 CookBook学习整理(十七)
  10. 用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法