谓词Predicate

谓词Predicate

谓词(即一个返回boolean值的函数)

java8 中允许接收一个函数,并返回一个函数。接收一个函数很好理解:

filter(list, (Apple a) -> a.getWeight() > 150)

方法filter接受了一个表达式,(Apple a) -> a.getWeight() > 150 他就相当于public static boolean a(Apple a) {return a.getWeight() > 150;}

那如何理解返回一个函数,在java源码中我们可以找到案例

default Predicate<T> and(Predicate<? super T> other) {
    Objects.requireNonNull(other);
    return (t) -> test(t) && other.test(t);
}

java8规定了接口如今可以包含实现类没有提供实现的方法签名,缺失的方法主体随接口提供了(因此就有了默认实现),而不是由实现类提供 简单来讲,就是java8为了给接口扩展函数,但是又希望实现了接口的实体类受到破坏,所以定义了新的规则(此处会引发菱形继承问题,如发生必须显式重写)

上面的方法来自java8的Predicate接口,可以看到返回值为 (t) -> test(t) && other.test(t)

该返回值返回的不是boolean, 而是(t) -> { return true|false; },相当于return (t) -> {return test(t) && other.test(t);}; 表示返回一个functional interface, 这个functional interface是什么根据上下文确定, 只要是接受参数是1个并且返回值是bool都可以, 在Predicate中就是functional interface自己, 因为方法规定了返回值是Predicate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值