Lambda快速入门

一. Lambda是什么

Lambda是JDK8新的特性,一个比较有趣的语法格式,我们还称为函数式编程。
函数式编程思想:
我们只需要关心结果,不关心过程,以及谁来实现。

二. Lambda能做什么

  1. 极大的减少代码冗余(最主要的体现就是使用Lambda表达式简化匿名内部类)
  2. 顺序和并行执行支持(使用lambda表达式的另一个好处是,我们可以受益于Stream API的顺序和并行操作支持)

下面我们就来快速的了解Lambda表达式的使用。

三. Lambda表达式的使用

 Lambda表达式的基本格式
        ( )->{ }   
        一些参数,一个箭头,一些代码
        ():重写接口中唯一抽象方法的参数列表,没有参数就空着,有多个参数使用逗号隔开
        ->:传递,可以把参数传递给{ }方法体使用
        { }:重写接口中唯一抽象方法的方法体
   Lambda表达式的使用前提:
        1.必须有接口
        2.接口中只能有且仅有一个抽象方法(函数式接口)     
   注意:
        Lambda表达式是可推导可省略
        Lambda表达式的目的就是重写接口中唯一的抽象方法
        接口的方法只有一个,可以推导出重写的就是接口中唯一的抽象方法,所以可以简化代码    

Lambda表达式简化格式
    简化:
        1.(参数列表):参数列表的数据类型是可以推导出来的,可以省略
            (int a)-->(a)
            (int a,String s)-->(a,s)
        2.(参数列表):参数列表中只有一个参数,()小括号也可以省略,但是参数列表没有参数,()小括号不能省略
            (int a)-->a
            ()-->不能省略-->()
        3.{重写抽象方法的方法体}:重写的方法体,如果只有一行代码(java中行是以分号隔开的)
            无论方法是否有返回值
            { }和一行代码结束的分号(;)return关键字可以省略不写
            但是他们必须一起省略
            

1.使用Lambda表达式简化匿名内部类

public class LambdaTest {
    public static void main(String[] args) {
        //传统方式实现多线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "实现多线程程序!");
            }
        }).start();

        //使用Lambda表达式的方式实现多线程
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "使用Lambda表达式的方式,实现多线程程序!");
        }).start();
    }
}

2.使用Lambda表达式重写有参数有返回值的方法

public class LambdaTest2 {
    @NoArgsConstructor
    @AllArgsConstructor
    @Data/*lombok*/
    static class Person {
        String name;
        int age;

    }

    public static void main(String[] args) {
        ArrayList<Person> list = new ArrayList<>();

        list.add(new Person("小王", 28));
        list.add(new Person("小明", 18));
        list.add(new Person("小张", 38));

        //遍历
        list.forEach(System.out::println);

        //传统方式排序
        list.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o2.getAge() - o1.getAge();
            }
        });

        //lambda简化传统排序
        list.sort((o1, o2) -> o2.getAge() - o1.getAge());/*按年龄倒序排序*/

        System.out.println("排序后>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        //遍历
        list.forEach(System.out::println);
    }
}
public class LambdaTest3 {
    @NoArgsConstructor
    @AllArgsConstructor
    @Data/*lombok*/
    static class Person {
        String name;
        int age;

    }

    public static void main(String[] args) {
        /*简化前
        TreeSet<Person> set = new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o2.getAge()-o1.getAge();
            }
        });*/
        //简化后
        TreeSet<Person> set = new TreeSet<>((o1, o2) -> o2.getAge() - o1.getAge());

        set.add(new Person("小王", 28));
        set.add(new Person("小明", 18));
        set.add(new Person("小张", 38));

        set.forEach(System.out::println);

    }
}

如果你和我一样,对Lambda很感兴趣 请继续了解,函数式接口以及Stream流。
链接: 函数式接口
链接: Stream流Api

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香辣奥利奥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值