Predicate函数式接口

Predicate接口主要用于流的筛选,比如在filter方法中传入Predicate判断。

作为函数式接口,这里居然有三个default方法,一个static方法,子孙满堂!

935339e94c84a125384da0affa183adb34c.jpg

正统的接口方法,就是boolean test​(T t),接受一个泛型T,如果输入参数与谓词匹配,则返回true,否则返回false。

da67069cef140c670d609093289ea60e5aa.jpg

先来看看静态相等判断方法,static <T> Predicate<T> isEqual​(Object targetRef)

这里判断对象是否相等,结合是否为空的处理,这里用了 Objects::isNull 和object.equals的方法。

dd0202d6133e478485527feb9184cb71fa4.jpg

再来看看默认or方法,default Predicate<T> or​(Predicate<? super T> other)

返回一个组合谓词,表示此谓词与另一个谓词的短路逻辑OR。在评估组合谓词时,如果此谓词为true,则不评估其他谓词。

这里就要求如参不能为null。

a218c6b4d57dd97853ec81195a5e4245528.jpg

default Predicate<T> negate​()  返回表示此谓词的逻辑否定的谓词。

9019f5ef439e9a5e5ba0449d5a0a9cea648.jpg

那么这个也很好理解了,就是与操作,default Predicate<T> and​(Predicate<? super T> other)

c671f02c0ffc067d35ebf52394162391aff.jpg

洗个简单的使用demo:

6f167da2c187799b589887575950d2827f0.jpg

输出:

a1ae58b2fa46daad6834714b76cbb5af56a.jpg

还有IntPredicate,DoublePredicate,LongPredicate,比较特别一点的就是Bipredicate,有两个泛型类型参数

5b45957ae68f774d84a5cb833160ce3c518.jpg

就像这样,是不是就容易理解多啦。

afa377f1fbbb8aa6fc81c79caae1cd12c6b.jpg

在流的很多方法中,都使用了Predicate接口作为参数判断!比如下面的 Collection.removeIf

c0b11206a63e9a2cbf18cb318f87b607ce3.jpg

 

转载于:https://my.oschina.net/u/2277632/blog/2987654

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值