5. Lambda Predicate

1.源码:

@FunctionalInterface
public interface Predicate<T> {
    /**
     * 具体过滤操作 需要被子类实现.
     * 用来处理参数T是否满足要求,可以理解为 条件A
     */
    boolean test(T t);
    /**
     * 调用当前Predicate的test方法之后再去调用other的test方法,相当于进行两次判断
     * 可理解为 条件A && 条件B
     */
    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }
    /**
     * 对当前判断进行"!"操作,即取非操作,可理解为 ! 条件A
     */
    default Predicate<T> negate() {
        return (t) -> !test(t);
    }
    /**
     * 对当前判断进行"||"操作,即取或操作,可以理解为 条件A ||条件B
     */
    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }

    /**
     * 对当前操作进行"="操作,即取等操作,可以理解为 A == B
     */
    static <T> Predicate<T> isEqual(Object targetRef) {
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }
}

简单案例:

public static void main(String[] args) {
        /**
         * 1、判断数字是否大于7
         */
        //设置一个大于7的过滤条件
        Predicate<Integer> predicate = x -> x > 7;
        System.out.println(predicate.test(10)); //输出 true
        System.out.println(predicate.test(6));  //输出 fasle
         /**
          * 2、大于7并且
          */
        //在上面大于7的条件下,添加是偶数的条件
        predicate = predicate.and(x -> x % 2 == 0);
        System.out.println(predicate.test(6));  //输出 fasle
        System.out.println(predicate.test(12)); //输出 true
        System.out.println(predicate.test(13)); //输出 fasle
        /**
         * 3、add or 简化写法
         */
        predicate = x -> x > 5 && x < 9;
        System.out.println(predicate.test(10)); //输出 false
        System.out.println(predicate.test(6));  //输出 true
    }

案例代码:

实体:

package com.study.stream;

import java.util.Objects;

public class Person implements Comparable<Person>{
    private String name;
    private Integer age;
    private Integer height;

    public Person(String name, Integer age, Integer height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return name.equals(person.name) &&
                age.equals(person.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return String.format("姓名:%s;年龄:%s;身高:%s;",this.name,this.age,this.height);
    }
    
    @Override
    public int compareTo(Person o) {
        return this.getAge().compareTo(o.getAge());
    }
}

案例:

package com.study.stream;

import java.util.function.Predicate;

public class PredicateDomel {

    public static void main(String[] agr){
        Predicate<Integer> predicate= x -> x>2;

        System.out.println("***********-- predicate test 判断是否符合--************");
        System.out.println(predicate.test(1));

        Predicate<Integer> predicate1= x -> x<10;
        System.out.println("***********-- predicate and 两个--************");
        System.out.println(predicate.and(predicate1).test(6));

        System.out.println(predicate.and(predicate1).test(40));

        System.out.println("***********-- predicate or 或--************");
        System.out.println(predicate.or(predicate1).test(40));

        System.out.println("***********-- predicate negate 相反--************");
        System.out.println(predicate.negate().test(4));

        System.out.println("***********-- predicate isEqual 比较相等--************");
        Person person= new Person("张一",18,172);
        Person person1=   new Person("张一",18,175);
        System.out.println(Predicate.isEqual(person).test(person1));

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面再给您提供几个Lambda表达式作为Predicate的实现的代码示例。 1. 筛选出字符串长度大于3的元素: ``` List<String> list = Arrays.asList("apple", "banana", "orange", "pear", "grape"); Stream<String> stream = list.stream().filter(s -> s.length() > 3); stream.forEach(System.out::println); ``` 输出结果为: ``` apple banana orange grape ``` 2. 筛选出年龄大于18岁的人: ``` List<Person> list = Arrays.asList( new Person("Tom", 20), new Person("Jerry", 16), new Person("Alice", 22), new Person("Bob", 18), new Person("Mike", 25) ); Stream<Person> stream = list.stream().filter(p -> p.getAge() > 18); stream.forEach(System.out::println); ``` 其中,Person是一个自定义的类,包含姓名和年龄两个属性,以及相应的get方法。输出结果为: ``` Tom, 20 Alice, 22 Mike, 25 ``` 3. 筛选出价格大于1000并且库存大于0的商品: ``` List<Product> list = Arrays.asList( new Product("iPhone", 8000, 100), new Product("iPad", 5000, 0), new Product("MacBook", 12000, 50), new Product("iWatch", 3000, 200), new Product("AirPods", 1200, 0) ); Stream<Product> stream = list.stream().filter(p -> p.getPrice() > 1000 && p.getStock() > 0); stream.forEach(System.out::println); ``` 其中,Product是一个自定义的类,包含商品名称、价格、库存三个属性,以及相应的get方法。输出结果为: ``` iPhone, 8000, 100 MacBook, 12000, 50 iWatch, 3000, 200 ``` 以上就是Lambda表达式作为Predicate的实现的几个示例,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值