jdk1.8带来的lambda

又是一年平安夜,平安夜对我来说有个特殊的意义。如今一人闲来无事整理一下觉得有意思的lambda,可能描述的不清和错误的地方,请大家指出批评。

lambda是一种函数式编程

jdk1.8之前如果我们想使用一个接口定义的功能,首先要先创建实现类,再创建是一实现类的对象 这样就受到了很多的语法限制。为了使用接口的功能必须创建对象 ,为了创建对象必须实现一个类 即使使用匿名内部类也十分的麻烦

传统代码:

//接口
package lambda简单例子;

public interface Eat {
    public abstract void eatFood(String sting);
}



//匿名内部类实现接口代码
package lambda简单例子;

public class TestDemo {
    public static void main(String[] args) {
        Eat eat=new Eat() {
            @Override
            public void eatFood(String string) {
                System.out.println(string+"正在吃饭");
            }
        };
        eat.eatFood("匿名内部类");
    }
}

我们只是想使用Eat接口的eatFood的方法 却要做一些列不相干的工作 ,为了简化代码可以使用lambda

package lambda简单例子;

public class TestDemo {
    public static void main(String[] args) {
        Eat eat=new Eat() {
            @Override
            public void eatFood() {
                System.out.println("匿名内部类正在吃饭");
            }
        };
        eat.eatFood();
        Eat eat1=string->System.out.println(string+"正在吃");
        eat1.eatFood("lambda");
    }
}

 

会同时输出匿名内部类正在吃饭和lambda正在吃 ,极大了简化了程序中的不必要代码 。只需要注重eatFood中要重写的方法体,只需要定义参数以及方法体即可。(可以看作是匿名内部类的语法糖,但不是,注意这种想法只是帮助理解,底层并不是这样实现)

lambda表达式的标准格式为()->{}; 使用的要求

1 必须是一个接口

2 接口中有且仅有一个抽象方法需要实现

接下来我们使用一个更有实际意义的代码来演示lambda,并说明lambda的什么时候可以省略

首先我们要知道Collections是jdk提供的一个集合(set,map)的工具类,sort(参数1,参数2)是其提供的一个排序工具

参数1 是要进行排序的集合   参数2 是一个Comparator对象   Comparator是一个接口必须重写compare方法

代码如下

//Student的标准javaBean类
package lambda练习;

public class Student {
    int age;

    public Student(int age) {
        this.age = age;
    }

    public Student() {
    }

    public int getAge() {
        return age;
    }

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

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

//
package lambda练习;
//使用lambda的前提
//是一个接口
//并且只有一个抽象方法,但是可以有其他默认 静态 私有 方法
import java.util.ArrayList;
import java.util.Collections;

public class TestDemo01 {
    public static void main(String[] args) {
        ArrayList<Student> arrayList=new ArrayList<>();
        arrayList.add(new Student(19));
        arrayList.add(new Student(20));
        arrayList.add(new Student(17));
        arrayList.add(new Student(10));
        arrayList.add(new Student(25));
        Collections.sort(arrayList, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //倒叙排序
                return o2.age-o1.age;
            }
        });
        //使用lambd表达式语法
        //固定格式(参数列表)->{方法体;返回值;}
        Collections.sort(arrayList,(Student o1,Student o2)->{return o2.age-o1.age;} );
        System.out.println(arrayList);
        //省略格式的lambd语法
        Collections.sort(arrayList,( o1, o2)->o1.age-o2.age);
        System.out.println(arrayList);
    }
}

 

lambda的标准格式为:(参数名...)->{方法体 ;}

省略的要求:

参数有且仅有一个的时候()可以省略

方法体中只有return语句时,{},return,括号中的分号均可以省略

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值