java之Lambda表达式简化代码

Lambda的使用前提

1. Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意使用 Lambda必须具有接口,且要求接口中有且仅有一个轴象方法。无论是DK内置的 Runnable、 Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯时,才可以使用 Lambda。 2.使用 Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为 Lambda对应的接口类型,才能使用 Lambda作为该接口的实例。

备注:有且仅有一个抽象方法的接口,称为函数式接口

简化使用匿名内部类的代码

public class DemoArrays {
    public static void main(String[] args) {
        Person[] arr = {
                new Person("张三", 20),
                new Person("李四", 22),
                new Person("王五", 19)
        };

//        Arrays.sort(arr, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o1.getAge()-o2.getAge();
//            }
//        });

        //用Lambda表达式简化
//        Arrays.sort(arr,(Person o1, Person o2)->{
//            return o1.getAge()-o2.getAge();
//        });

        //继续简化
//        Arrays.sort(arr,(Person o1, Person o2)->o1.getAge()-o2.getAge());

        //再升级
        Arrays.sort(arr, Comparator.comparingInt(Person::getAge));

        for (Person person : arr) {
            System.out.println(person.getName()+": "+person.getAge());
        }
    }
}

Lambda:表达式:是可推导,可以省,凡是根据上下文推导出来的内容,都可以省略书写

可以省略的内容

1.(参数列表):括号中参数列表的数据类型,可以省略不写

2.(参数列表):括号中的参数如果只有一个,那么类型和()都可以省

3.{一些代码]:如果们中的代码只有一行,无论是否有返回值,都可以省略(}, return,分号)

注意:要省略{}, return,分号必须一起省略

例:invokeCalc(a,b,c,(a,b,c)->a+b+c);

经验分享 程序员 微信小程序 职场和发展