其他分享
首页 > 其他分享> > 大道至简,看Lambda表达式如何将方法化繁为简

大道至简,看Lambda表达式如何将方法化繁为简

作者:互联网

lambda表达式

lambda可以看作是匿名方法
在这里插入图片描述

函数式接口

一个接口有且只有一个抽象方法

可以在接口上添加注释@FunctionalInterface,编译器就会自动检测,按函数式接口的定义要求此接口

@FunctionalInterface
interface Lambda{
    void Test();
    static void func1(){
    
    }
    default void func2(){
    
    }

    public void boolean equals();
}

Lambda表达式的使用

    public static void main(String[] args) {
        Lambda lambda = new Lambda() {
            @Override
            public void Test() {
                System.out.println("good job");
            }
        };
        lambda.Test();

        Lambda lambda1 = () -> System.out.println("good job");
        lambda1.Test();
    }
@FunctionalInterface
interface Lambda1{
    void Test(int a);
}
        Lambda1 lambda11 = (int a) -> System.out.println(a);
        Lambda1 lambda12 = a -> System.out.println(a);
@FunctionalInterface
interface Lambda2{
    void Test(int a,int b);
}
        Lambda2 lambda2 = (int a,int b) -> System.out.println(a+b);
        Lambda2 lambda21 = (a,b) -> System.out.println(a+b);
@FunctionalInterface
interface Lambda3{
    int Test();
}
        Lambda3 lambda3 = () -> {return 10;};
        Lambda3 lambda31 = () -> 10;
@FunctionalInterface
interface Lambda4{
    int Test(int a);
}
        Lambda4 lambda4 = (int a) -> {return a;};
        Lambda4 lambda41 = a -> a;
        System.out.println(lambda41.Test(10));  //10
@FunctionalInterface
interface Lambda5{
    int Test(int a,int b);
}
        Lambda5 lambda5 = (int a,int b) -> {return a+b;};
        Lambda5 lambda51 = (a,b) -> a+b;
        System.out.println(lambda51.Test(10,2)); //12

Lambda使用场景

Lambda表达式只适用于函数式接口

abstract class Player{
    abstract void func();
}
        //匿名内部类
        Player player = new Player(){
            @Override
            void func() {
                System.out.println("匿名内部类来了");
            }
        };
        player.func();
        //Lambda表达式实现但是不行,翻译过来是Lambda表达式必须是代替一个接口的
        Player player1 = () -> System.out.println("匿名内部类来了");

在这里插入图片描述

变量捕获

匿名内部类的变量捕获

捕获的变量必须是一个常量或者是没有改变过的变量

class Test{
    public void func(){
        System.out.println("func()");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        //a = 99;     //No
        new Test(){
            @Override
            public void func() {
            //a = 99;  //No
                System.out.println("我是内部类,且重写了func()方法");
                System.out.println(a);
            }
        };
    }
}

Lambda的变量捕获

        int a =10;
        Lambda lambda1 = () -> {System.out.println("good job");
            System.out.println(a);};
        lambda1.Test();             //good job  
                                    //10 

Lambda在集合中使用

列举List 和 Map 中的forEach()方法
forEach()遍历集合元素

List中的forEach()

在这里插入图片描述

    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(5);
        list.add(8);
        list.add(10);
        list.add(9);
        list.add(2);


//匿名内部类
        list.forEach(new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.print(o + " ");
            }
        });
//Lambda表达式
        list.forEach((o) -> System.out.print(o + " "));
    }

Map的forEach()方法

在这里插入图片描述

        HashMap<Integer,String> map = new HashMap<>();
        map.put(1,"chao");
        map.put(2,"yue");
        map.put(3,"xiao");
        map.put(4,"qiang");
        map.put(5,"yu");
//匿名内部类
        map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer integer, String s) {
                System.out.println("Integer:"+integer+" "+"String:"+s);
            }
        });
//Lambda表达式
        map.forEach((integer, s) -> System.out.println("Integer:"+integer+" "+"String:"+s));

List的Sort()方法

        list.sort(new Comparator<Integer>() {
            @Override
            //从小到大
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });

        list.sort((o1, o2) -> o1-o2);

虽然不太关注比赛,但愿EDG守护LPL最后的荣光

标签:大道至简,int,void,System,println,out,化繁为简,Lambda
来源: https://blog.csdn.net/gjwloveforever/article/details/121179425