Fork me on GitHub

Lambda表达式

Lambda表达式

Lambda概述

  • Lambda表达式时JDK8开始后的一种新语法格式
  • 作用:简化匿名内部类的代码写法

Lambda表达式的简化格式

image

注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式

什么是函数式接口?

  • 首先必须是接口、其次接口中有且仅有一个抽象方法的形式
  • 通常我们会在接口上加上一个 @FunctionalInterface 注解,标记该接口必须是满足函数式接口

image

/**
* 目标:学会使用Lambda的标志格式简化匿名内部类的代码形式
* Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
*/
public class LambdaDemo2 {
public static void main(String[] args) {
// Swimming s1 = new Swimming() {
// @Override
// public void swim() {
// System.out.println("老师游泳贼六");
// }
// };
Swimming s1 = () -> {
System.out.println("老师游泳贼六");
};
go(s1);
System.out.println("--------------------");
go(new Swimming() {
@Override
public void swim() {
System.out.println("学生游泳很开心");
}
});
go(()->{
System.out.println("学生游泳很开心");
});
}
public static void go(Swimming s){
System.out.println("开始...");
s.swim();
System.out.println("结束...");
}
}
@FunctionalInterface //一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
interface Swimming{
void swim();
}

image

Lambda实战-简化常见函数式接口

Lambda表达式简化Comparator接口的匿名形式

image

Lambda表达式简化按钮监听器ActionListener的匿名内部类形式

image

public class LambdaDemo3 {
public static void main(String[] args) {
Integer[] ages1 = {34, 12, 42, 23};
/**
* 参数一:被排序的数组,必须是引用类型的元素
* 参数二:匿名内部类对象,代表了一个比较器对象
*/
Arrays.sort(ages1, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; //降序
}
});
Arrays.sort(ages1,(Integer o1, Integer o2)-> {
return o2 - o1; //降序
});
System.out.println(Arrays.toString(ages1));
System.out.println("---------------------");
JFrame win = new JFrame("登录");
JPanel panel = new JPanel();
win.add(panel);
win.setSize(400,300);
win.setVisible(true);
JButton btn = new JButton("按钮");
JButton btn2 = new JButton("点我!");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点我,点我,有人点我!");
}
});
btn2.addActionListener(e -> System.out.println("点我,点我,有人点我!"));
panel.add(btn);
panel.add(btn2);
}
}

Lambda表达式的省略规则

image

posted @   944964684  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
1
点击右上角即可分享
微信分享提示