Java进阶之函数式编程Predicate:用法实例(二百五十六)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🌻1. 前言

本篇目的:Java进阶之函数式编程Predicate:用法实例

🌻2. Java进阶之Predicate介绍

  1. 基本概念
    Predicate是Java 8核心函数式接口,表示接收参数T并返回boolean的断言函数,用于过滤、校验、条件判断等场景。

  2. 功能
    提供test、and、or、negate、isEqual方法;可链式组合;支持泛型边界;配合Stream.filter、Optional.filter使用。

  3. 使用限制
    不能抛出受检异常;链式组合注意短路逻辑;并行流需线程安全;避免副作用。

  4. 性能特性
    Lambda内联执行;链式组合生成新Predicate实例;短路特性提前返回;比匿名类更轻量。

  5. 使用场景
    集合过滤、参数校验、规则引擎、存在性判断、链式条件组合。

🌻3. 代码实例

🌻3.1 使用Predicate过滤集合
  1. 应用场景
    筛选出偶数列表。

  2. 用法实例

    import java.util.*;
    import java.util.function.Predicate;
    import java.util.stream.Collectors;
    public class FilterPredicateDemo {
        public static void main(String[] args) {
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
            Predicate<Integer> isEven = n -> n % 2 == 0;
            List<Integer> evens = list.stream().filter(isEven).collect(Collectors.toList());
            System.out.println(evens);
        }
    }
    

    输出[2, 4, 6]

🌻3.2 使用Predicate链式组合条件
  1. 应用场景
    组合范围与非空校验。

  2. 用法实例

    import java.util.function.Predicate;
    public class ChainPredicateDemo {
        public static void main(String[] args) {
            Predicate<Integer> inRange = n -> n >= 0 && n <= 100;
            Predicate<Integer> nonNull = n -> n != null;
            Predicate<Integer> valid = nonNull.and(inRange);
            System.out.println(valid.test(50));  // true
            System.out.println(valid.test(150)); // false
        }
    }
    

    输出true false

🌻3.3 使用Predicate并行过滤大集合
  1. 应用场景
    并行流快速过滤合法邮箱。

  2. 用法实例

    import java.util.*;
    import java.util.stream.*;
    public class ParallelPredicateDemo {
        public static void main(String[] args) {
            List<String> emails = Arrays.asList("a@b.com", "invalid", "c@d.com", null);
            Predicate<String> isEmail = s -> s != null && s.contains("@");
            List<String> valid = emails.parallelStream()
                                        .filter(isEmail)
                                        .collect(Collectors.toList());
            System.out.println(valid);
        }
    }
    

    输出[a@b.com, c@d.com]

🌻3.4 函数式编程Predicate总结

关键词功能描述典型应用
Predicate断言接口过滤条件
and/or/negate链式组合复杂条件
parallelStream并行过滤大集合过滤
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值