当前位置: 代码网 > it编程>编程语言>Java > Java8需要知道的4个函数式接口简单教程

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

2025年03月05日 Java 我要评论
什么是函数是接口?函数式接口是一个包含单个抽象方法的接口,且可以有任意多个默认方法或静态方法。为了增强可读性,java 8 引入了@functionalinterface注解,用于标识该接口是一个函数

什么是函数是接口?

函数式接口是一个包含 单个抽象方法 的接口,且可以有任意多个默认方法或静态方法。为了增强可读性,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结合

consumer 是 foreach 的核心参数类型:

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]

总结 

到此这篇关于java8需要知道的4个函数式接口的文章就介绍到这了,更多相关java8函数式接口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com