Java 1.8 Function 函数式接口

更新时间 2023-07-18 18:27:41

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

Function 接口代表一个接受一个参数并且产生结果的操作。它在 Java 中被广泛用于函数式编程以及 Stream API 中的转换操作

本小节将深入介绍 Java 1.8 中的 Function 接口,并通过示例代码演示如何使用它。

Function 接口概览

java.util.function 包中,Function 接口定义如下:

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}
  • T 表示输入参数的类型。
  • R 表示返回结果的类型。
  • apply(T t) 是 Function 接口中唯一的抽象方法,用于对输入参数 t 进行操作,并返回结果。

Function 接口是一个泛型接口,它可以接受不同类型的参数和返回不同类型的结果。

使用 Function 接口

接下来,让我们通过几个示例来说明如何使用 Function 接口。

示例 1:将字符串转换为大写

创建一个 Function 接口实例,将输入的字符串转换为大写形式。

Function<String, String> toUpperCaseFunc = str -> str.toUpperCase();
String input = "hello, world!";
String result = toUpperCaseFunc.apply(input);
System.out.println(result); // 输出 "HELLO, WORLD!"

在这个例子中,我们创建了一个 Function 对象 toUpperCaseFunc,它将字符串转换为大写形式。我们调用 apply() 方法来执行函数,将输入的字符串 "hello, world!" 转换为大写形式并输出结果。

示例 2:计算字符串的长度

使用 Function 接口计算字符串的长度。

Function<String, Integer> lengthFunc = str -> str.length();
String input = "Java 1.8";
int length = lengthFunc.apply(input);
System.out.println("Length of '" + input + "' is: " + length); // 输出 "Length of 'Java 1.8' is: 7"

在这个例子中,我们创建了一个 Function 对象 lengthFunc,它返回输入字符串的长度。我们调用 apply() 方法来执行函数,计算字符串 "Java 1.8" 的长度并输出结果。

示例 3:转换字符串为整数

使用 Function 接口将字符串转换为整数。

Function<String, Integer> parseIntFunc = str -> Integer.parseInt(str);
String input = "12345";
int number = parseIntFunc.apply(input);
System.out.println("Parsed number: " + number); // 输出 "Parsed number: 12345"

在这个例子中,我们创建了一个 Function 对象 parseIntFunc,它将字符串转换为整数。我们调用 apply() 方法来执行函数,将字符串 "12345" 转换为整数并输出结果。

Function 的组合

Function 还提供了一些默认方法用于函数的组合:

  • andThen(Function after): 返回一个先执行当前 Function 的 apply 方法,再执行 after Function 的 apply 方法的新 Function。
  • compose(Function before): 返回一个先执行 before Function 的 apply 方法,再执行当前 Function 的 apply 方法的新 Function。

下面是一个组合示例:

Function<String, Integer> parseToInt = str -> Integer.parseInt(str);
Function<Integer, Integer> square = num -> num * num;

Function<String, Integer> parseAndSquare = parseToInt.andThen(square);

String input = "5";
int result = parseAndSquare.apply(input);
System.out.println("Parsed and squared result: " + result); // 输出 "Parsed and squared result: 25"

在这个例子中,我们首先将字符串转换为整数,然后对整数进行平方运算,最终输出结果。

总结

Java 1.8 中的 Function 接口为函数式编程提供了强大的支持。通过使用 Function 接口,我们可以轻松地定义并执行接受一个参数并返回结果的操作。函数的组合使得函数式编程变得更加灵活和强大。