Java中Lambda表达式

Demo1:

package com.itheima.d9_lambda;

public class LambdaDemo1 {
    public static void main(String[] args) {
        //目标:学会使用lambda的标准格式简化匿名内部类的代码形式
        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("乌龟跑得很慢!");
            }
        };
        a.run();

//        Animal a1 = ()->{
//                System.out.println("乌龟跑得很慢!");
//        };
//        a.run();
    }
}
abstract class Animal{
    public abstract void run();
}

Demo2:

package com.itheima.d9_lambda;

public class LambdaDemo2 {
    public static void main(String[] args) {
        //目标:学会使用lambda的标准格式简化匿名内部类的代码形式
        //Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
//        Swimming s1 = new Swimming() {
//            @Override
//            public void swim() {
//                System.out.println("老师游泳贼溜!!!!!");
//            }
//        };
//        go(s1);
        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();
}

Demo3:

package com.itheima.d9_lambda;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;
public class LambdaDemo3 {
    public static void main(String[] args) {
        Integer[] ages1 = {16 , 32 , 11 , 6 , 98};
        /**
         * 参数一:被排序的数组,必须是引用类型的元素
         * 参数二:匿名内部类对象,代表了一个比较器对象
         */
//        Arrays.sort(ages1, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2 - o1; //降序
//            }
//        });
//        System.out.println(Arrays.toString(ages1));

        Arrays.sort(ages1, (Integer o1, Integer o2)-> {
                return o1 - o2; //升序
        });
        System.out.println(Arrays.toString(ages1));

        System.out.println("-----------------------");
        JFrame win = new JFrame("登陆界面");

        JButton btn = new JButton("我是一个很大的按钮");
//        btn.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                System.out.println("我被点击了");
//            }
//        });
        btn.addActionListener((ActionEvent e)-> {
                System.out.println("我被点击了");
        });

        win.add(btn);
        win.setSize(400,300);
        win.setVisible(true);
    }

}

1、Lambda表达式的基本作用?
简化函数式接口的匿名内部类的写法

2、Lambda表达式有什么使用前提?
必须是接口的匿名内部类,接口中只能有一个抽象方法

(Demo1中出bug的原因就是因为lambda不能使用在抽象类上,使用后或提示‘Target type of a lambda conversion must be an interface’)

3、Lambda的好处?
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码作为一种更紧凑的代码风格,使java语言表达能力得到了提升

posted @ 2023-06-13 21:16  镰刀战士  阅读(33)  评论(0)    收藏  举报