使用Predicate操作Collection集合

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 条件的图书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

油猴的简介和安装

目录 1.油猴简介 2.油猴插件安装 方法1 方法2 3.获取油猴脚本 4.脚本的使用 4.1 脚本的设置及功能 4.2 安装油猴脚本 4.3 新建脚本 5.脚本编写方法 功能注释 脚本权限 编写脚本 1.油猴简介 油猴脚本是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c…

Logistic回归——二分类 —— matlab

目录 1.简介 2.应用范围 3.分类 3.应用条件 4.原理详解 4.1 sigmod分类函数 4.2 建立目标函数 4.3 求解相关参数 5.实列分析 5.1 读取数据&#xff08;excel文件&#xff09; 5.2 分离数据集 5.3 求解前设定 5.4 求解目标函数 5.5 预测 5.6 预测分类 5.7 准确率…

java 抽象类_java中的抽象类

普通类可以直接产生实例化对象&#xff0c;并且在普通类之中可以包含有构造方法、普通方法、static方法、常量、变量的内容。而所谓的抽象类就是指在普通类的结构里面增加抽象方法的组成部分&#xff0c;抽象方法指的是没有方法体的方法&#xff0c;同时抽象方法还必须使用abst…

Stream操作Collection集合

独立使用 Stream 的步骤如下&#xff1a; 1 . 使用 Stream 或 XxxStream 的 builder() 类方法创建该 Stream 对应的 Builder。 2 . 重复调用 Builder 的 add() 方法向该流中添加多个元素。 3 . 调用 Builder 的 build() 方法获取对应的 Stream。 4 . 调用 Stream 的聚集方法…

Logistic回归——二分类 —— python

目录 1.简介 2.应用范围 3.分类 3.应用条件 4.原理详解 4.1 sigmod分类函数 4.2 建立目标函数 4.3 求解相关参数 5.实列分析 5.1 导入库 5.2 读取数据&#xff08;excel文件&#xff09; 5.3 分离数据集 5.4 求解前设定 5.5 求解目标函数 5.6 预测 5.7 预测分类…

dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

狂神说SpringBoot系列连载课程&#xff0c;通俗易懂&#xff0c;基于SpringBoot2.2.5版本&#xff0c;欢迎各位狂粉转发关注学习。未经作者授权&#xff0c;禁止转载分布式理论什么是分布式系统&#xff1f;在《分布式系统原理与范型》一书中有如下定义&#xff1a;“分布式系统…

第一个脚本-HelloWorld

目录 前言 脚本的作用 创建脚本 开始编写我们这次的HelloWorld的对话框 前言 我的扩展主要使用:Tampermonkey&#xff0c;当然其他的有类似功能的也可以&#xff0c;我们就将这些统称为油猴吧。 本节主要内容: 描述脚本的作用和油猴,脚本的基本结构,创建一个脚本,使它能够…

bme280 环境传感器开发板_STM32Cube14 | 使用硬件I2C读写环境光强度传感器

更多精彩~点击上面蓝字关注我们呀&#xff01; 寻求更好的阅读体验&#xff0c;请点击阅读原文移步&#xff1a;Mculover666的个人博客。本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)。1. 准备工作硬件准备开发板首先…

Java查询图书信息

使用泛型集合来实现某图书管理系统的查询功能。 在图书管理系统中为了方便管理图书&#xff0c;将图书划分为几个类别。每个类别下有很多图书&#xff0c;每本图书都有相对应的类别&#xff0c;这就具备了一对多的关系映射&#xff0c;即一个类别对应多本图书。 在这种情况下…

平稳序列的拟合和预测之序列的预测

目录 1.线性预测函数 2.预测方差最小原则 3.线性最小方差预测的性质 AR(p)序列的预测 例题 R语言预测举例 MA(q)序列的预测 例题 ARMA(p,q)序列预测 例题 小结 序列只有为非白噪声时才可以进行预测哦&#xff01;&#xff01; 1.线性预测函数 根据平稳性和可逆性&…

python界面设计实例qt_pyqt的最小示例qtreeview和qt设计

我试图为qt设计器设计的应用程序获取一个最小的示例&#xff0c;其中pyqt涉及一个QTreeView 1&#xff09;我可以用这种方式启动应用程序&#xff0c;但是如果我按下按钮&#xff0c;TreeView小部件中没有显示任何条目&#xff0c;我没有收到任何错误消息&#xff0c;布局看起来…

TypeError: ufunc ‘multiply‘ did not contain a loop with signature matching types dtype(‘S32‘) dtype(

目录 错误&#xff1a; 解决&#xff1a; 错误&#xff1a; TypeError: ufunc multiply did not contain a loop with signature matching types dtype(S32) dtype(S32) dtype(S32) 翻译&#xff1a;TypeError: ufunc multiply 不包含签名匹配类型 dtype(S32) dtype(S32) d…

Java一对多关系示例

生活中常见一对多关系的例子&#xff0c;如一个学校可以包含多个学生&#xff0c;一个学生属于一个学校&#xff0c;那么这就是一个典型的一对多关系&#xff0c;可以通过集合进行关系的表示。 1 . 定义学生类 import java.util.HashSet; import java.util.Iterator;public c…

vue 浏览器调试 样式如何定位样式_浏览器断点调试-程序员的必修课

一、源码调试/debugger方法1.1控制台调试按钮介绍Resume script execution恢复断点调试、常用在一个方法调用多个js文件(适用冗长js代码使用)、点击这个会直接跳转到下一个断点(逐过程执行)Pause script execution停止断点调试step over next function call逐语句执行&#xff…

Python: ufunc ‘bitwise_xor‘ not supported for the input types,....

错误&#xff1a; ufunc bitwise_xor not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule safe 原因&#xff1a; 错误使用 ^ 解决&#xff1a; 将使用的 ^ 全部改为 ** &#xff0c…

https open api_Web上的分享(Share)API

我认为Web Share API非常酷&#xff0c;简而言之&#xff0c;它会利用您所使用的平台上的原生共享功能(如果该平台支持的话)。我喜欢这个&#xff1a;远远不止这些东西&#xff1a;为什么&#xff1f;Web Share API只是几行代码。简单&#xff01;没有图像&#xff0c;没有重量…

Java多对多关系示例

使用集合不仅可以表示一对一的关系&#xff0c;也可以表示多对多的关系。例如&#xff0c;一个学生可以选多门课程&#xff0c;一门课程可以有多个学生参加&#xff0c;那么这就是一个典型的多对多关系。 要完成上面要求&#xff0c;首先应该定义两个类&#xff0c;分别是学生…

无季节效应的非平稳序列分析(一)

目录 Cramer分解定理&#xff08;1961年提出&#xff09; 差分 R语言函数 diff 例题&#xff1a; 过差分&#xff1a; 小结 Cramer分解定理&#xff08;1961年提出&#xff09; 任何一个时间序列 都可以分解为两部分的叠加:其中一部分是由多项式决定的确定性趋势成分&a…

求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法

公元2020年5月5日&#xff0c;距离算法考试仅剩4天。一、知识归纳1.设计思想只根据当前已有的信息就做出选择&#xff0c;而且一旦做出了选择&#xff0c;将来无论如何都不能更改不从整体最优考虑&#xff0c;所做的选择只是在某种意义上的局部最优这种选择并不总能获得整体最优…

安装百分之80卡住_关注丨男子翻越高铁站台丢命,家属向铁路部门索赔80万!法院这样判...

去年3月&#xff0c;一名男子翻越高铁站台被卡住致死引发广泛关注。事发后&#xff0c;其家属将铁路部门告上法庭&#xff0c;索赔80余万元。日前&#xff0c;法院宣判&#xff1a;死者杨某擅自闯入危险区域负全责&#xff0c;其父母要求铁路部门赔偿的诉请被驳回。事件还原201…