在文章开始之前,推荐一些很值得阅读的好文章!感兴趣的也可以去看一下哦!
今日推荐:深入浅出JVM(十五)之垃圾收集器
文章链接:https://cloud.tencent.com/developer/article/2472162
这篇文章主要介绍垃圾回收器的分类、性能指标以及串行与并行的垃圾收集器。对GC分类与性能指标及各种垃圾收集器都有很好的介绍,通过一些图例很好的描述了垃圾回收器相关的内容。
前言函数式接口,即适用于函数式编程场景的接口。
在Java中的我们使用函数式编程最直观的体现就是lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口。
当然,只有在确保接口中有且仅有一个抽象方法的时候,Lambda才能顺利地进行推导程序。
什么是函数式接口?函数式接口(Functional Interface)是Java 8及以后版本引入的一个概念,它是Java语言中的一种特殊接口。
函数式接口的定义非常简单:一个接口如果只有一个抽象方法,那么它就是一个函数式接口。
函数式接口的主要特点包括:只包含一个抽象方法:这是函数式接口最核心的特点。针对于函数式接口有且只能有一个未实现的方法。例如,java.util.function.Predicate
一个简单的函数式接口定义代码语言:txt复制@FunctionalInterface //注解
interface MyFunctionalInterface {
void eat();//有且只有一个抽象方法
}
Lambda表达式与函数式接口Lambda表达式是Java 8引入的一种表示方式,用于实例化函数式接口。
Lambda表达式的核心是使用更紧凑的方式来表达一个方法的行为,尤其是类似函数式接口这种在只有一个单一方法的情况下。
例如我们来实现上面简单函数式接口:
代码语言:txt复制MyFunctionalInterface fun = () -> System.out.println("我饿了,想吃饭");
fun.eat(); // 输出: 我饿了,想吃饭这样简单的表达式就实现了对接口MyFunctionalInterface 的实现及方法的使用。
更简单的方法引用方式方法引用是另外一种简化函数式接口实例化的方式。
方法引用允许我们直接引用一个已有的方法作为Lambda表达式。
例如:直接通过System.out::println这个已有的方法来实现接口作为表达式。
代码语言:txt复制MyFunctionalInterface fun = System.out::println;
fun.eat();//输出为空使用System.out::println作为方法引用,其目的是在测试方法引用方式 ,在这里无实际意义。
JAVA中内置的函数式接口Java 8及以后的版本在java.util.function包中引入了一系列内置的函数式接口,这些接口覆盖了常见的函数形式,使得在需要使用函数式接口时,可以直接使用这些内置接口,无需自己定义。
PredicateFunction
代码语言:txt复制Function
Integer result = toInteger.apply("123"); // 返回123
函数式接口在Stream API中的应用Stream API大量使用了函数式接口,几乎所有的方法入参都有函数式接口的身影存在。例如,filter方法接受一个Predicate
代码语言:txt复制List
numbers.stream()
.filter(n -> n == 1) // 使用Predicate接口 过滤
.map(n -> n * n) // 使用Function接口 转换流中的数据
.forEach(System.out::println); // 使用Consumer接口 打印
总结函数式接口是一个强大的特性,它使得程序支持更多的函数式编程风格,同时简化并提高了代码的可读性和灵活性。
邀请人:文家齐