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

【Java】Java8的4个函数式接口简单教程

什么是函数是接口?

函数式接口是一个包含 单个抽象方法 的接口,且可以有任意多个默认方法或静态方法。为了增强可读性,Java 8 引入了 @FunctionalInterface 注解,用于标识该接口是一个函数式接口,编译器会帮助我们检查是否符合函数式接口的规范。

今天我们还讲讲Consumer、Supplier、Predicate、Function这几个接口的用法,在 Java8 的用法当中,这几个接口虽然没有明目张胆的使用,但是,却是润物细无声,在许多框架,工具类,方法参数都频频出现。

这几个接口都在java.util.function包下的,分别是

  • Consumer(消费型)
  • supplier(供给型)
  • predicate(谓词型)
  • function(功能性)

Consumer

Consumer 是 Java 8 中引入的一个函数式接口,位于 java.util.function 包中,主要用于表示一个接受单个输入参数但没有返回值的操作(类似于执行某种“消费”行为)。

可以理解为:参数被消费了,石沉大海了

接口定义

  • 泛型 T:表示输入的参数类型。
  • accept(T t) 方法:定义了消费操作。

核心特点

  • 单输入、无返回值:适用于只需要处理输入而不需要返回结果的场景。
  • 支持链式调用:通过 andThen 方法可以组合多个 Consumer

注意事项

不可变性:Consumer没有返回值,因此不能直接将结果传递给下一个操作

慎用副作用:避免在Consumer中引入全局变量修改等副作用代码

常见用法

1.基本用法

2.结合andThen链式调用

功能:按顺序组合两个 Consumer,前一个完成后调用下一个。

3.结合集合操作

Consumer 常用于集合元素的处理。

4.与forEach结合

ConsumerforEach 的核心参数类型:

5.结合Stream API

Consumer 可用于 Stream 中的终端操作 forEach

6.自定义操作

Consumer 可用于封装复杂逻辑:

Supplier

Supplier 接口是 Java 8 引入的一个函数式接口,属于 java.util.function 包。它的主要作用是提供一个没有输入参数的结果Supplier 接口的核心方法是 get(),该方法用于返回一个结果。

理解:空手套白狼,只索取,不付出,供给型接口

接口定义

get()方法,可以看到,是return一个变量

常见用法

1.基本用法

可以通过 Lambda 表达式或方法引用来创建 Supplier 实例。

2.与Stream API结合使用

Supplier 可以与 Java Stream API 结合使用,生成流中的元素。

3.作为方法参数

Supplier 可以作为方法参数传递,允许调用者定义生成对象的逻辑。

4.结合Optional使用
Optional<String> optionalString = Optional.ofNullable(null);
String result = optionalString.orElseGet(() -> "Default Value");
System.out.println(result); // 输出: Default Value

predicate

Predicate 接口是 Java 8 引入的一个函数式接口,位于 java.util.function 包中。它的主要作用是用于测试某个条件,返回布尔值Predicate 接口定义了一个抽象方法 test,接受一个输入参数并返回一个布尔值。

接口定义

常见用法

1.基本用法

2.组合Predicate API

Predicate接口还提供了几个默认方法,允许组合多个Predicate实例

  • and(Predicate other): 连接两个 Predicate,只有在两个 Predicate 都为 true 时,结果才为 true
  • or(Predicate other): 连接两个 Predicate,只要其中一个为 true,结果就为 true
  • negate(): 反转 Predicate 的结果。

3.用于过滤集合

Predicate常用于集合的过滤操作,特别是与 Stream API 配合使用。你可以使用 filter 方法对集合进行筛选。

4.自定义Predicate

也可以创建自己的 Predicate 实现

function

Java 8 中的 Function<T, R> 接口是四大核心函数式接口之一,它用于表示接收一个类型为 T 的参数并返回类型为 R 的结果的操作。

接口定义

常用方法

1.基本用法

2.组合Function API

Function 接口提供了两个常用的默认方法:andThen()compose(),还有identity(),可以用来组合多个函数

andThen() 方法用来链式调用

compose() 方法与 andThen() 的区别在于它先应用传入的 Function,再应用当前的 Function

一句话总结:这俩方法是相反的

identity() 方法返回一个始终返回其输入参数的函数

identity() 方法在流的处理过程中也有应用,尤其是当我们希望原样返回一个对象时非常有用。

Function<Integer, Integer> identityFunction = Function.identity();
System.out.println(identityFunction.apply(10));  // 输出 10

3.与其他函数式接口组合

Function 接口常常与其他函数式接口配合使用,特别是在流(Streams)处理时,能够大大提升代码的简洁性和可读性。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eve");
List<String> longNames = names.stream().filter(name -> name.length() > 3)  // 先筛选长度大于 3 的名字.map(name -> name.toUpperCase())    // 将符合条件的名字转成大写.collect(Collectors.toList());
System.out.println(longNames);  // 输出 [ALICE, CHARLIE, DAVE]

http://www.lryc.cn/news/503849.html

相关文章:

  • 计算机组成原理与系统结构——微程序控制
  • 【Swift】集合类型 - 数组、集合、字典
  • 3D 视觉定位技术:汽车零部件制造的智能变革引擎
  • 操作系统的基本认识
  • 使用pycharm连接远程服务器
  • 【Linux SH脚本】LinuxCheck 应急检查信息脚本
  • apifox创建一个mock接口
  • 设计一个基础JWT的多开发语言分布式电商系统
  • 委托(Delegate)与事件(Event)-(上篇)
  • Scala根据身份证前两位数判断地区
  • freeswitch(开启支持视频H264通话)
  • 启发式搜索算法和优化算法的区别
  • 数据结构初阶---二叉树---堆
  • 微信小程序中 crypto-js 加解密全攻略
  • 单片机的软件开发环境
  • 【echarts】数据过多时可以左右滑动查看(可鼠标可滚动条)
  • Python 实现对人的行为预测
  • 使用枚举实现单例模式,不会反序列化破坏攻击,不会被反射破坏攻击。(附带枚举单例的简单实现)
  • scala隐式转换
  • Spring Boot 应用 “Connection is closed” 及 MySQL 空闲超时断开连接解决方案
  • SLF4J框架原理及其实现方案
  • 代码随想录-算法训练营-番外(图论01:图论理论基础,所有可到达的路径)
  • 【JAVA】Java项目实战—Java EE项目:企业资源规划(ERP)系统
  • springboot配置过滤器解决html资源路径和接口路径冲突问题
  • 在IDE中使用Git
  • 【AIGC进阶-ChatGPT提示词副业解析】反向心理学在沟通中的运用:激将法的艺术
  • JeecgBoot passwordChange 任意用户密码重置漏洞复现
  • 【智体OS】官方上新发布智体机器人:使用rtrobot智体应用远程控制平衡车机器人
  • Blazor(.razor)+VUE+elementUI适合一起用吗
  • SpringBoot左脚进门之Maven管理家