【睡JDK】Java函数式编程接口详解之Predicate

一、初识

Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断

首先看看源码:

@FunctionalInterface
public interface Predicate<T> {
   
   

    boolean test(T t);

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

    default Predicate<T> negate() {
   
   
        return (t) -> !test(t);
    }
    
    default Predicate<T> or(Predicate<? super T> other) {
   
   
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }

    static <T> Predicate<T> isEqual(Object targetRef) {
   
   
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }
}

对函数式编程接口有一定了解的同学可能会疑惑,为啥 有这么多方法,不是说函数式编程接口只有一个方法吗?确实没错,但这个方法只限于没有实现的方法,不包括有实现的方法,自从Java引入了default关键字后,在接口内是可以编写default方法的。

喏,上面不是还有一个static方法?其实想想也是能想得通的,static方法属于类的信息,不属于实例信息,我们平时编码的时候可能不会这么写,但是不代表不可以这么写哦。

二、基础用法

我们现在不必纠结其他方法,把注意力集中在boolean test(T t)方法上。我们先看一段示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 6);
List<Integer> list1 = list.stream()
    .filter(num -> num < 5)
    .collect(Collectors.toList());

这段代码就是过滤列表中小样5的数字,并生成一个新的列表,当我们点进filter方法的实现,代码如下:

@Override
    public final Stream<P_OUT> filter(Predicate<? super P_OUT> predicate) {
   
   
        Objects.requireNonNull(predicate);
        return new StatelessOp<P_OUT, P_OUT>(this, StreamShape.REFERENCE,
                                     StreamOpFlag.NOT_SIZED) {
   
   
            @Override
            Sink<P_OUT> opWrapSink(int flags, Sink<P_OUT> sink
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值