Java8需要知道的4个函数式接口简单教程

2025-03-05 17:50

本文主要是介绍Java8需要知道的4个函数式接口简单教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中...

什么是函数是接口?

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

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

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

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

Consumer

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

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

接口定义

Java8需要知道的4个函数式接口简单教程

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

核心特点

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

注意事项

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

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

常见用法

1.基本用法

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

2.结合andThen链式调用

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

3.结合集合操作

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

4.与forEach结合

Consumer 是 forEach 的核心参数类型:

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

5.结合Stream API

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

6.自定义操作

Consumer 可用于封装复杂逻辑:

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

Supplier

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

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

接口定义

Java8需要知道的4个函数式接口简单教程

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

Java8需要知道的4个函数式接口简单教程

常见用法

1.基本用法

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

2.与Stream API结合使用

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

3.作为方法参数

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

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,接受一个输入参数并返回一个布尔值。

接口定义

Java8需要知道的4个函数式接口简单教程

常见用法

1.基本用法

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

2.组合Predicate API

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

  • and(Phttp://www.chinasem.cnredicate other): 连接两个 Predicate,只有在两个 Predicate 都为 true 时,结果才为&nbsphpp;true
  • or(Predicate other): 连接两个 Predicate,只要其中一个为 true,结果就为 true
  • negate(): 反转 Predicate 的结果。

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

3.用于过滤集合

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

4.自定义Predicate

也可以创建自己的 Predicate 实现

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

function

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

接口定义

Java8需要知道的4个函数式接口简单教程

常用方法

1.基本用法

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

2.组合Function API

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

andThen() 方法用来链式调用

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

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

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

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

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

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

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

Java8需要知道的4个函数式接口简单教程

Java8需要知道的4个函数式接口简单教程

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]

总结 

到此这篇关于Java8需要知道的4个函数式接口的文章就介绍到这了,更多相关Java8函数式接口内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Java8需要知道的4个函数式接口简单教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153649

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input