当前位置: 首页 > news >正文

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

文章目录

  • 161. Java Lambda 表达式 - 使用工厂方法创建 Predicates
      • 🎯 Predicate 工厂方法概览
      • 🧪 示例一:`Predicate.isEqual()` 工厂方法
      • 🧪 示例二:`Predicate.not()` 工厂方法(`Java 11+`)
      • 🎯 总结:为什么要使用这些工厂方法?
      • 💡 小练习

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

Java 8+ 中,Predicate<T> 接口除了可以通过 lambda 表达式和方法引用创建,还提供了 工厂方法(Factory Methods) 来进一步提升代码的可读性和表现力。


🎯 Predicate 工厂方法概览

方法说明
Predicate.isEqual(Object targetRef)返回一个用于判断“是否等于某个对象”的Predicate
Predicate.not(Predicate<T> predicate)返回一个“否定”现有PredicatePredicate(从 Java 11 起可用)

🧪 示例一:Predicate.isEqual() 工厂方法

Predicate<String> isEqualToDuke = Predicate.isEqual("Duke");

✅ 这个谓词的含义是:当输入的字符串等于 "Duke" 时,返回 true

等价于传统的写法:

Predicate<String> isEqualToDuke = s -> "Duke".equals(s);

🔍 用途:可用于对象比较判断,如字符串、枚举、标识符等。


🧪 示例二:Predicate.not() 工厂方法(Java 11+

我们先来一个简单的“判断集合是否为空”的谓词:

Predicate<Collection<String>> isEmpty = Collection::isEmpty;

如果我们要判断“集合不是空的”,可以使用 not()

Predicate<Collection<String>> isNotEmpty = Predicate.not(isEmpty);

这样相比使用 .negate() 的方式更加 语义直观,代码也更具有可读性

// 使用 negate()
Predicate<Collection<String>> isNotEmpty = isEmpty.negate();// 更推荐的方式
Predicate<Collection<String>> isNotEmpty = Predicate.not(isEmpty);

🎯 总结:为什么要使用这些工厂方法?

优势说明
✅ 可读性更高比手动写 lambda 更直观
✅ 更符合语义比如 isEqual() 语义就清晰表达了“相等”
✅ 更易于组合可以与 .and().or() 等方法链式搭配

💡 小练习

试着使用 Predicate.isEqual()Predicate.not() 实现下面两个谓词:

  • 判断一个字符串是否是 "admin"
  • 判断一个字符串是否 不是 "admin"
Predicate<String> isAdmin = Predicate.isEqual("admin");
Predicate<String> isNotAdmin = Predicate.not(isAdmin);
http://www.xdnf.cn/news/1308907.html

相关文章:

  • 力扣(LeetCode) ——142. 环形链表 II(C语言)
  • OpenShift 4.19安装中的变化
  • Vue 3与React内置组件全对比
  • Hadoop面试题及详细答案 110题 (16-35)-- HDFS核心原理与操作
  • 音视频学习(五十四):基于ffmpeg实现音频重采样
  • 基于单片机的防酒驾系统设计
  • 我的世界Java版1.21.4的Fabric模组开发教程(十八)自定义传送门
  • 《C++进阶之继承多态》【多态:概念 + 实现 + 拓展 + 原理】
  • 超越“调参”:从系统架构师视角,重构 AI 智能体的设计范式
  • 嵌入式硬件篇---电感本质
  • VScode 使用遇到的问题
  • Git Revert 特定文件/路径的方法
  • 设计模式之【快速通道模式】,享受VIP的待遇
  • leetcode_ 739 每日温度
  • AI杀死的第一个仪式:“hello world”
  • C++设计模式:面向对象设计原则
  • B+树索引分析:单表最大存储记录数
  • Day2--滑动窗口与双指针--2090. 半径为 k 的子数组平均值,2379. 得到 K 个黑块的最少涂色次数,2841. 几乎唯一子数组的最大和
  • Windows 基于ACL(访问控制列表)的权限管理
  • Manus AI与多语言手写识别的技术突破与行业变革
  • 数学建模Topsis法笔记
  • 【php反序列化介绍与常见触发方法】
  • Bash常用操作总结
  • 9.从零开始写LINUX内核——设置中断描述符表
  • RK3568 NPU RKNN(五):RKNN-ToolKit-lite2板端推理
  • linux I2C核心、总线与设备驱动
  • Dify实战应用指南(上传需求稿生成测试用例)
  • 守护品质安全,防伪溯源系统打造全链路信任体系
  • MySQL异步连接池的学习(五)
  • 海康机器人3D相机的应用