我假设你正在谈论来自Guava的com.google.common.base.Predicate 。

从API:

确定给定input的true值或false值。 例如,一个RegexPredicate可能实现了Predicate ,并且对任何匹配给定正则expression式的string返回true。

这本质上是一个booleantesting的OOP抽象。

例如,你可能有一个这样的帮手方法:

static boolean isEven(int num) { return (num % 2) == 0; // simple }

现在,给定一个List ,你可以像这样处理偶数:

List numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10); for (int number : numbers) { if (isEven(number)) { process(number); } }

通过Predicate , iftesting被抽象为一个types。 这使得它可以与API的其他部分互操作,比如Iterables ,它有很多使用Predicate实用方法。

因此,你现在可以写这样的东西:

Predicate isEven = new Predicate() { @Override public boolean apply(Integer number) { return (number % 2) == 0; } }; Iterable evenNumbers = Iterables.filter(numbers, isEven); for (int number : evenNumbers) { process(number); }

请注意, if没有iftesting,现在for-each循环要简单得多。 通过使用Predicate进行filter ,我们定义了Iterable evenNumbers ,从而达到了更高的抽象级别。

API链接

Iterables.filter

返回满足谓词的元素。

在高阶函数上

Predicate允许Iterables.filter作为所谓的高阶函数。 就其本身而言,这提供了许多优点。 以上面的List numbers例子。 假设我们要testing所有数字是否都是正数。 我们可以写这样的东西:

static boolean isAllPositive(Iterable numbers) { for (Integer number : numbers) { if (number < 0) { return false; } } return true; } //... if (isAllPositive(numbers)) { System.out.println("Yep!"); }

通过一个Predicate ,并与其他库进行互操作,我们可以写下这个:

Predicate isPositive = new Predicate() { @Override public boolean apply(Integer number) { return number > 0; } }; //... if (Iterables.all(numbers, isPositive)) { System.out.println("Yep!"); }

希望你现在可以看到更高抽象的例子,比如“用给定谓词过滤所有元素”,“检查所有元素是否满足给定的谓词”等等,以获得更好的代码。

不幸的是,Java没有一stream的方法:你不能将方法传递给Iterables.filter和Iterables.all 。 当然,您可以在Java中传递对象 。 因此,定义了Predicatetypes,而是传递实现此接口的对象 。

也可以看看

维基百科/高阶函数

维基百科/filter(高阶函数)

java谓词_在Java中谓词相关推荐

  1. linux java 栈_关于Java中栈与堆的思考

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  2. js 中 java 代码_在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...

  3. java 企业版_下列版本中哪个是Java 企业版

    下列版本中哪个是Java 企业版 2021-02-07 下列版本中哪个是Java 企业版 张爱玲评价自己的服饰:"仿佛穿着博物院的()到处走,遍体森森然飘飘欲仙".转动惯量是刚体转 ...

  4. jython 导入java包_在jython中导入java类

    我用python处理NLP.有一个NLP工具,即Zemberek,用于土耳其语.但它是用java编写的.所以我必须使用jython来导入这些类.我安装了Jython2.7.另外,我安装了eclipse ...

  5. 修改docker内java内存_在docker中使用java的内存情况

    Java和Docker不是天然的朋友. Docker可以设置内存和CPU限制,而Java不能自动检测到.使用Java的Xmx标识(繁琐/重复)或新的实验性JVM标识,我们可以解决这个问题. 虚拟化中的 ...

  6. 谷歌去水印java实现_在Java中实现Google的“您的意思是”功能

    谷歌去水印java实现 介绍 搜索引擎用户经常因各种原因而拼写错误的搜索词,包括键盘问题(键不起作用),陌生的国际名称(例如Sigmund Freud),意外更改一个字母(Sinpsons)或添加一个 ...

  7. java地区_在Java中存储国家/地区代码,名称和Continent的最佳方式

    在ISO 3166中有246个国家,你可能会在此背后得到一个继电器大枚举.我更喜欢使用包含国家/地区列表的 XML文件,您可以从 http://www.iso.org/下载一个并加载它们(例如,当应用 ...

  8. java 抛物线_关于java中模拟抛物线轨迹的问题

    展开全部 看了这套题目感觉很有兴趣,就花了一e69da5e6ba903231313335323631343130323136353331333264623831个中午亲手给你写了一个类似的例子,相信可 ...

  9. java 最大化_在Java中最大化JInternalFrame

    我试图让JInternalFrame在启动时最大化.我已经对此进行了网络搜索并尝试了各种代码建议,但它们似乎无法在我的机器上正常运行,该机器在 Windows 7上运行 Java 6. 我已经简化了下 ...

  10. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

最新文章

  1. 摩天轮社区_看房日记:难得!宜宾,又来一楼盘!一线江景+公园+学校,还有小户型、摩天轮...
  2. 程序员的量化交易之路(35)--Lean之DataFeed数据槽3
  3. checkbox全选衍生问题讨论
  4. 磨刀不误砍柴工—Exceptionless搭配log4net记录日志
  5. openssh升级sftp_OpenSSH 8.2 发布 包括 sftp 客户端和服务器支持
  6. mysql change index_MySQL · 引擎特性 · Innodb change buffer介绍
  7. matlab 嵌入式,面向嵌入式系统的 MATLAB 和 Simulink
  8. Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
  9. mysql 的标识符_MySQL查询或标识符在Jupyter中太长?
  10. matlab三角波发生器精度改为定点型,关于matlab simulink中三角波模块的问题!
  11. 三招帮你解决物联网卡上不了网问题
  12. python 继承与多态
  13. 力扣-61 旋转链表
  14. View绘制详解(四),谝一谝layout过程
  15. 怎么获取计算机用户权限,如何获取电脑的最高管理权限|细讲电脑最高管理权限的获取方式...
  16. AWS Credentials
  17. 第三阶段应用层——1.7 数码相册—电子书(1)—实现
  18. 论文阅读 Neural Network Modeling of Nonlinear Systems Based on Volterra Series Extension of a Linear Mod
  19. 这才是高效判断素数的正确打开方式
  20. 从架构到策划一个人两个晚上通宵搞定

热门文章

  1. 数据结构-第九章 内部排序-知识点总结1
  2. HDU 5608 function (杜教筛)
  3. Deltix Round, Spring 2021 D. Love-Hate 随机化 + sos dp(高维前缀和)
  4. 【十二省联考2019】希望【点边容斥】【换根dp】【长链剖分】【线性数据结构】【回退数据结构】【离线逆元】
  5. [Wannafly挑战赛2D-Delete]最短路
  6. 牛客网【每日一题】3月25日 tokitsukaze and Soldier
  7. CodeForces 1610H Squid Game(延迟贪心 + 构造 + 树状数组)
  8. [ONTAK2010] Peaks加强版 (kruskal重构树+主席树+倍增)
  9. [COCI] Zamjena
  10. 洛谷P6302:回家路线(斜率优化)