java 谓词_Java中的谓词

从API:

确定一个

true

false

给定输入的值。例如,A

RegexPredicate

可能实施

Predicate

,并为与其给定正则表达式匹配的任何字符串返回true。

这本质上是对

boolean

测试。

例如,您可能有这样一个助手方法:

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

, the

if

测试被抽象为一个类型。这允许它与API的其余部分进行互操作,例如

Iterables

有许多实用方法

谓语

.

因此,您现在可以这样写:

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);

}

注意,现在for each循环在没有

如果

测试。通过定义

Iterable evenNumbers

通过

filter

使用一个

谓语

.

API链接

关于高阶函数

谓语

允许

ITerables.filter(过滤器)

作为所谓的高阶函数。这本身就提供了许多优势。拿

List numbers

上面的例子。假设我们想测试所有的数字是否都是正数。我们可以这样写:

static boolean isAllPositive(Iterable numbers) {

for (Integer number : numbers) {

if (number < 0) {

return false;

}

}

return true;

}

//...

if (isAllPositive(numbers)) {

System.out.println("Yep!");

}

用一个

谓语

以及与其他库的互操作,我们可以编写以下代码:

Predicate isPositive = new Predicate() {

@Override public boolean apply(Integer number) {

return number > 0;

}

};

//...

if (Iterables.all(numbers, isPositive)) {

System.out.println("Yep!");

}

希望您现在可以在更高的抽象中看到例程的值,例如“按给定谓词筛选所有元素”、“检查所有元素是否满足给定谓词”等,从而获得更好的代码。

不幸的是,Java没有一流的方法:你不能通过。

方法

周围

ITerables.filter(过滤器)

Iterables.all

. 当然,你可以绕过去

物体

在Java中。因此,

谓语

类型已定义,您将通过

物体

而是实现这个接口。

也见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值