JDK8 Lambda表达式

Lambda表达式的使用场景:

仅适用于函数式接口的匿名内部类

 什么是函数式接口?

函数式接口一般用@FunctionalInterface来标注,接口中有且仅有一个抽象方法。

Lambda表达式的格式

(形参参数值)-> {方法体}

简化原则

  1. 如果形参只有一个,可以省略左右括号
  2. 如果方法体内只有一行代码,可以省略大括号,省略大括号时,必须省略分号,如果有return也必须要省略。
  3.  方法体仅是调用一个静态方法,并且前后形参相同,可以使用静态方法引用。类名::方法名
  4. 方法体仅是调用一个实例方法,并且前后形参相同,可以使用实例方法引用。对象::方法名
  5. 方法体仅调用一个实例方法,且以前一个参数作为方法调用方,后一个参数作为入参,此时可以使用特定类型引用。类型::方法
  6. 方法体只是用来创建一个对象,且方法的参数与创建对象的方法参数一致,可以使用构造器引用。类名::new
public class TestLambda {

    public static void main(String[] args) {
        /****对象数组排序****/
        Students s1 = new Students(5,100.5);
        Students s2 = new Students(8,140.5);
        Students s3 = new Students(6,110.5);

        Students[] studentsArr = {s1,s2,s3};
        Arrays.sort(studentsArr, new Comparator<Students>() {
            @Override
            public int compare(Students o1, Students o2) {
//                return o1.getAge()-o2.getAge(); // 按年龄升序排列
                return Double.compare(o2.getHeigth(),o1.getHeigth()); // 按身高倒序排列
            }
        });

        // (形参的参数值)->{方法体}
        Arrays.sort(studentsArr, (o1, o2) -> {
            return Double.compare(o2.getHeigth(), o1.getHeigth()); // 按身高倒序排列
        });

        // 如果方法体内只有一行代码,可以省略大括号,省略大括号时,必须省略分号,如果有return也必须要省略。
        Arrays.sort(studentsArr, (o1, o2) -> Double.compare(o2.getHeigth(), o1.getHeigth()));
        // 方法体仅是调用一个静态方法,并且前后形参相同,可以使用静态引用::
        Arrays.sort(studentsArr, TestLambda::compare);
    }

    public static int compare(Students s1,Students s2){
        return Double.compare(s2.getHeigth(), s1.getHeigth());
    }

    static class Students{
        private int age;
        private double heigth;

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public double getHeigth() {
            return heigth;
        }

        public void setHeigth(double heigth) {
            this.heigth = heigth;
        }

        public Students(int age, double heigth) {
            this.age = age;
            this.heigth = heigth;
        }

        @Override
        public String toString() {
            return "Students{" + "age=" + age + ", heigth=" + heigth + '}';
        }
    }

 特定类型引用

 String[] names = {"Angel","Lily","Benki","anny","bob"};
 // 排序时忽略大小写
 Arrays.sort(names,(o1, o2) -> o1.compareToIgnoreCase(o2));
 // 方法体仅调用一个实例方法,且以前一个参数作为方法调用方,后一个参数作为入参,此时可以使用特定类型引用。类型::方法
 Arrays.sort(names,String::compareToIgnoreCase);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值