函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式。
在Java中使用Lambda表达式的前提:需要是函数接口。
函数接口
接口中只存在一个需要被实现的抽象方法。
注:即便该接口中存在默认方法与静态方法,与Object中也存在的抽象方法(如equal等),毕竟所有实现的子类肯定继承自Object,只要只存在一个需要被实现的方法就算函数接口。
附:JDK1.8新特性:接口中可以存在默认实现的方法(default修饰)与静态方法(必须有方法体)。
下面的接口也属于函数接口:
package interfaces;
@FunctionalInterface
public interface MyInterface {
/*
* JDK1.8 新特性:接口中可以存在默认实现的方法(default修饰)与静态方法(必须有方法体)。
*
*/
// 唯一要手动实现的方法
int compare(int a, int b);
// Object的方法,毕竟实现类都是Object的子类,都已经默认实现了equals方法
boolean equals(Object obj);
// Object的方法,毕竟实现类都是Object的子类,都已经默认实现了toString方法
String toString();
public static void a(){
System.out.println("我是接口中的静态方法a");
}
public static void b(){
System.out.println("我是接口中的静态方法b");
}
default void c(){
System.out.printf("我是接口中的默认方法c");
}
default void d(){
System.out.printf("我是接口中的默认方法d");
}
}
Lambda表达式书写
多个形参
参数类型可以省略,如果没有形参,小括号也可以省略
(s1, s2) -> {
return s1.compareTo(s2);
}
只有一行代码(可省略return与括号)
(s1, s2) -> s1.compareTo(s2)
方法引用
方法引用也是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用,可以进一步简化代码。简化前提:方法引用,是指如果某个方法签名和接口恰好一致,就可以直接传入方法引用。
附:除了方法名外,方法参数一致,返回类型相同,因此,我们说两者的方法签名一致,可以直接把方法名作为Lambda表达式传入。
使用前提文章来源:https://www.toymoban.com/news/detail-815847.html
- 引用处必须是函数式接口
- 被引用的方法必须已经存在
- 被引用方法的形参和返回值必须和抽象方法保持一致
- 被引用方法的功能要满足当前需求
常见函数接口文章来源地址https://www.toymoban.com/news/detail-815847.html
- 接收一个任意类型参数,返回一个任意类型参数。
java.util.function Interface Function<T,R>
- 接收一个任意类型参数,不返回参数。
java.util.function Interface Consumer<T>
- 不接收任何参数,返回一个任意类型参数。
java.util.function Interface Supplier<T>
- 接收一个任意类型参数,返回一个布尔类型参数。
java.util.function Interface Predicate<T>
到了这里,关于Java 8 新特性之Lambda表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!