Lambda表达式
- lambda概述
- Lambda实战-简化常见函数接口
- Lambda表达式的省略规则
1.Lambda概述
- Lambda表达式时JDK8开始后的一种语法形式。
- 作用:简化匿名内部类的代码写法
- Lambda表达式的简化格式
(匿名内部类被重写方法的形参列表)->{
被重写方法的方法体代码.
}
注:->是语法形式,无实际含义
注意:
Lambda表达式只能简化函数式接口的匿名内部类的写法形式
什么是函数是接口?
- 首先必须是接口,其次接口中有且仅有一个抽象方法的形式
- 通常我们会在接口上加上一个@FunctionInterface注解,标记该接口必须是满足函数式接口。
总结:
- Lambda表达式的基本作用?
- 简化函数式接口的匿名内部类的写法。
- Lambda表达式有什么使用前提?
- 必须是接口的匿名内部类,接口中只能有一个抽象方法
- Lambda的好处/
- Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁,更灵活的代码,作为一种更紧凑的代码风格,是Java语言表达能力得到了提升
使用实例:
public class LambdaDemo1 {
public static void main(String[] args) {
// complete(new run() {
// @Override
// public void go() {
// System.out.println("乌龟跑的很慢!!!!!!!!!!!!!!");
// }
// });
complete(() ->System.out.println("乌龟跑的慢!!!!!!!!!!!!!!"));
}
public static void complete(run r){
r.go();
}
}
@FunctionalInterface
interface run{
public void go();
}
2.Lambda实战-简化常见的函数式接口
Lambda表达式简化comparator接口的匿名形式
import java.util.Arrays;
/**
* Lambda表达式简化compare函数
* */
public class LambdaDemo2 {
public static void main(String[] args) {
Integer[] arr = new Integer[]{213, 231421, 312312, 231321, 2314};
// Arrays.sort(arr, new Comparator<Integer>() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return o1-o2;
// }
// });
//Lambda表达式简化
Arrays.sort(arr, (Integer o1, Integer o2)-> {
return o1-o2;});
System.out.println(Arrays.toString(arr));
}
}
Lambda表达式简化按钮监听器ActionListener的匿名内部类形式
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Lambda表达式简化按钮监听器ActionListener的匿名内部类形式
* */
public class LambdaDemo3 {
public static void main(String[] args) {
//创建窗口对象
JFrame win = new JFrame("测试窗口");
//创建桌布对象
JPanel panel = new JPanel();
//将桌布添加到窗口上
win.add(panel);
//创建窗口大小与位置
win.setSize(300, 400);
win.setLocation(404,202);
//创建按钮
JButton btn = new JButton("点击");
//为按钮添加事件监听器
// btn.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// System.out.println("你真的点了!!!!!!!!!!!!!!!!");
// }
// });
//利用lambda表达式简化
btn.addActionListener((ActionEvent e) ->{
System.out.println("你真的点了!!!!!!!!!!!!!!!!");
});
//将按钮添加到桌布上
panel.add(btn);
win.setVisible(true);
}
}
3.Lambda表达式的省略规则
Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)
- 参数类型可以省略不写
- 如果只有一个参数,参数类型可以省略,同时()也可以省略
- 如果Lambda表达式的方法体只有一行代码。可以省略大括号不写,同时要省略分号!
- 如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略“;”不写
// btn.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// System.out.println("你真的点了!!!!!!!!!!!!!!!!");
// }
// });
//利用lambda表达式简化
btn.addActionListener((ActionEvent e) ->{
System.out.println("你真的点了!!!!!!!!!!!!!!!!");
});
btn.addActionListener( e->System.out.println("你真的点了!!!!!!!!!!!!!!!!"));
Arrays.sort(arr, (Integer o1, Integer o2)-> {
return o1-o2;});
System.out.println(Arrays.toString(arr));
}
简化
Arrays.sort(arr, ( o1, o2)-> o1-o2);
System.out.println(Arrays.toString(arr));
}