一、典型场景--点击事件
java语言:
button.addActionListener(new ActionListener()){
public void actionPerformed(ActionEvent event){
println(''button clicked'')
}
}
lambda表达式写法:
button.addActionListener(event -> println(''button clicked''));
二、函数式接口
函数式接口是完完全全的接口,和interface没有任何区别。
首先看一下Jdk中的Runnable接口, 它就是一个函数式接口。
public interface Runnable {
public abstract void run();
}
只包含一个抽象方法的接口, 我们称之为函数式接口。
匿名内部类的写法:
new Thread(new Runnable() {
@Override
public void run() {
doSomeThing();
}
}).start();
Lambda表达式的写法:
new Thread(
() -> dosomething()
).start();
三、Lambda表达式
a.类型
Java中的lambda表达式是有类型的,每个lambda表达式 的类型对应着一个函 数式接口
b.几种基本的写法
Runnable noArgument = () -> System.out.println("Hello, world!");
ActionListener onArgument = event -> System.out.println("button clicked");
Runnable multiStatement = () -> {
System.out.print("Hello, ");
System.out.println(" world");
};
BinaryOperator<Long> add = (x, y) -> x + y;
BinaryOperator<Long> addExplicit = (Long x, Long y) -> x + y; //显式声明 类型参数
C.Lambda表达式的基本组成
一个是表达式参数,用()包含;二是代码块,用{}包含。这两部分之间用 -> 分开。
Lambda表达式参数部分:参数的类型、()都可以酌情省略。
注意:
1.lambda表达式对应的接口抽象方法没有参数,此时的()不可省略。
2.有一个参数时,()可以省略,参数类型酌情省略
栗子:
1). (ActionEvent event) ->{} 2). (event) -> {} 3). event -> {}
3.参数大于一个时,()不可省略。
D.代码块
当lambda表达式对应的函数式接口的抽象方法存在返回值,并且代码块中仅有返回语句,可以省略return关键字。