这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
Lambda函数
Java实现匿名函数
- 创建内部接口 LambdaInterface01
- 实现接口LambdaInterface01的方法fun()
- 调用方法
Lambda和Java实现匿名函数的区别
- ==new LambdaInterface01() ==直接简化为==()==
- ==方法名public void fun()== 简化为 ==->==
代码示例
package com.lingyiwin;
/**
* @author lingyiwin
* @version 1.0
* @date 2020/10/21 22:24
*/
public class Lambda01 {
public static void main(String[] args) {
/**
* Java 匿名类的实现方式
*/
LambdaInterface01 lambdaInterface01_java = new LambdaInterface01() {
@Override
public void fun() {
System.out.println("Java 匿名类的实现方式 lambdaInterface01_java");
}
};
//函数调用
lambdaInterface01_java.fun();
/**
* Lambda 函数表达式的实现方式
*/
LambdaInterface01 lambdaInterface01_lambda = ()->{
System.out.println("Lambda 函数表达式的实现方式 lambdaInterface01_lambda");
};
lambdaInterface01_lambda.fun();
}
}
/**
* 内部接口
* 接口内部只有一个方法,称为函数式接口
*/
interface LambdaInterface01{
public void fun();
}
如果大括号中{ ==只有一行代码==}可以直接将代码写在箭头后面。
public class Lambda02 {
public static void main(String[] args) {
Runnable runnable_java = new Runnable() {
@Override
public void run() {
System.out.println("Java");
}
};
runnable_java.run();
Runnable runnable_lambda01 = () -> {
System.out.println("Lambda01");
};
runnable_lambda01.run();
//如果{只有一行带吗}可以简写为如下:
Runnable runnable_lambda02 = () -> System.out.println("Lambda02");
runnable_lambda02.run();
}
}
Lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。
它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。
函数式接口:Functional Interface. 有且只有一个抽象方法 ,这样的接口就成为函数式接口。 JAVA8的接口可以有多个default方法)
任何函数式接口都可以使用lambda表达式替换。
lambda表达式只能出现在目标类型为函数式接口的上下文中。
Java SE 8中增加了一个新的包:java.util.function,它里面包含了常用的函数式接口,例如:
Predicate<T> 接收T对象 返回boolean
Consumer<T> 接收T对象 不返回
Function<T,R> 接收T对象 返回对象
Supplier<T> 提供T对象 不接收值
unaryOperator<T> 接收T对象 返回T对象
BinaryOperator<T> 接收两个T对象 返回T对象