Lambda

作用: 简化匿名内部类的代码写法。

 

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

 

什么是函数是接口:

   首先必须是接口,其次接口中有且仅有一个抽象方法的形式。

   通常我们会在接口上加上一个 @FunctionalInterface 注解,标记该接口必须是满足函数式接口。

 

 1 public class lambda_demo2 {
 2     public static void main(String[] args) {
 3 
 4         // 简化
 5         Swimming s1 = () -> {
 6 
 7                 System.out.println("老师游泳厉害");
 8         };
 9         go(s1);
10 
11         System.out.println("------------------------------------");
12 
13         go(() -> {
14             System.out.println("学生游泳也厉害");
15         });
16     }
17     // 接口作为类型,代表可以接所有子类对象
18     public static void go(Swimming s) {
19         System.out.println("开始!");
20         s.swim();
21         System.out.println("结束!");
22     }
23 }
24 
25 @FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
26 interface Swimming{
27     void swim();
28 }

 

 

 

 

Comparator , 窗口监听 也可以简化

 

 1 import javax.swing.*;
 2 import java.awt.event.ActionEvent;
 3 import java.util.Arrays;
 4 
 5 public class lambda_demo3 {
 6     public static void main(String[] args) {
 7 
 8         // 降序排序  (自定义比较器对象,只能支持引用类型的排序)
 9 //        Integer[] ages1 = {34, 21, 45, 12};
10 //        Arrays.sort(ages1, new Comparator<Integer>() {
11 //            @Override
12 //            public int compare(Integer o1, Integer o2) {
13 //
14 //                //降序
15 //                return -(o1 - o2);
16 //            }
17 //        });
18 
19 
20         // 简化
21         Integer[] ages1 = {34, 21, 45, 12};
22         Arrays.sort(ages1, (Integer o1, Integer o2) -> {
23             {
24                 //降序
25                 return -(o1 - o2);
26             }
27         });
28         System.out.println(Arrays.toString(ages1));
29 
30         System.out.println("----------------------------------");
31 
32         JFrame win = new JFrame("登录界面");
33         JButton btn = new JButton("按钮");
34 
35 //        btn.addActionListener(new ActionListener() {
36 //            @Override
37 //            public void actionPerformed(ActionEvent e) {
38 //                System.out.println("监听到有人再按");
39 //            }
40 //        });
41 
42         //监听是否再按按钮
43         btn.addActionListener((ActionEvent e) -> {
44                 System.out.println("监听到有人在按");
45         });
46 
47         win.add(btn);
48         win.setSize(200, 200);
49         win.setVisible(true);
50     }
51 
52 }

 

 

 

Lambda表达式的省略方法(进一步在Lambda表达式的基础上继续简化)

   参数类型可以省略不写。

   如果只有一个参数,参数类型可以省略,可以省略大括号不写,同时要省略分号。

   如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,此时,如果这行代码是return语句,必须省略return不写,同时也必须省略分号不写。

 

posted @ 2022-07-22 10:25  小王同学学编程  阅读(44)  评论(0编辑  收藏  举报
levels of contents