java.util.function总结

本文详细解析了Java中函数式接口的演变过程,包括Function、Supplier、Consumer、Predicate等核心接口,以及它们如何针对特定类型进行优化,如IntFunction、DoublePredicate等,旨在减少自动装箱拆箱带来的性能损耗。

这里的函数式接口看似众多,确实很多hhh,但是很还是很有规律的。

首先不得不提到的是Function<T,R>,另外的3个都可以看做从他衍生出来的.

supplier<T>(不接收参数),consumer<T>(接收一个参数,无返回值),Predicate<T>,(返回boolean类型)

然后一方面是在输入参数上演化了,提出了BiFunction(T,U,R),BiConsumer<T,U>,BiPreicate<T,U>.

另一方面是在输入参数的类型上演化,把几种基础类型(int,double,long)进行了私人订制,减少了泛型参数。。

还得说的是BiFunction的子类BinaryOperator<T>,就是指3个泛型是同种类型,然后又是一通基础类型(int,double,long)的私人订制。

一是输入参数上的扩充,另一方面是输入输出类型上的定制化,还有就是考虑到Bifunction的3个泛型类型一样的情况。

 

这么看是不是简单很多了。。。

 

更新:之所以加上很多输入输出类型上的定制化是为了避免自动装箱拆箱导致的性能损耗。

Java 中遇到 **“无法访问 `java.util.function.Function`,找不到类文件”** 的问题,通常与使用的 Java 版本或项目配置有关。以下是可能的原因和解决方案: ### 1. Java 版本过低 `java.util.function.Function` 是在 Java 8 中引入的函数式编程接口之一。如果项目运行或编译时使用的是 Java 7 或更早版本,则无法访问该类。 - **解决方案**:确保项目使用的是 **Java 8 或更高版本**。可以在命令行中执行以下命令检查当前 Java 版本: ```bash java -version ``` 如果版本低于 1.8,则需要升级 JDK 并配置正确的环境变量。 ### 2. 编译器或 IDE 设置错误 即使系统中安装了 Java 8,如果 IDE(如 IntelliJ IDEA 或 Eclipse)或构建工具(如 Maven 或 Gradle)配置了错误的 JDK 路径或语言级别,也可能导致无法识别 `java.util.function.Function`。 - **Maven 配置示例**:确保在 `pom.xml` 中配置了正确的 Java 版本: ```xml <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> ``` - **Gradle 配置示例**:在 `build.gradle` 文件中设置源和目标兼容性: ```groovy tasks.withType(JavaCompile) { options.compilerArgs += ["-source", "1.8", "-target", "1.8"] } ``` - **IDE 设置**:在 IntelliJ IDEA 中,可以通过 **File → Project Structure → SDKs** 确保使用的是 Java 8 或更高版本。在 Eclipse 中,检查 **Project → Properties → Java Build Path** 和 **Java Compiler** 设置。 ### 3. 类路径(Classpath)问题 如果项目构建过程中没有正确包含标准库(rt.jar),也可能导致找不到 `Function` 类。 - **解决方案**:确保构建工具(如 Maven 或 Gradle)正确解析依赖,并且 IDE 中的项目类路径没有异常配置。 ### 4. 混合使用不同 Java 版本的依赖 如果项目中使用了某些依赖库,这些库可能要求更高版本的 Java 或与当前 Java 版本不兼容。 - **解决方案**:检查依赖库的文档,确保它们与当前 Java 版本兼容。可以使用以下命令查看依赖树并排查冲突: ```bash mvn dependency:tree ``` ### 示例代码 以下是一个使用 `Function` 接口的简单示例,确保在 Java 8 或更高版本环境中运行: ```java import java.util.function.Function; public class FunctionExample { public static void main(String[] args) { Function<String, Integer> stringToInteger = Integer::valueOf; int result = stringToInteger.apply("123"); System.out.println(result); } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值