【Java8新特性】——Lambda表达式

前提

    在Java8中提出了lambda表达式,而且众多大神也极力推荐使用lambda表达式进行编程,以此提高开发效率,同时提升代码质量。经常使用lambda表达式的同胞都知道,使用lambda表达式极大程度避免了空指针的问题,提高系统的稳定性。所以无论怎么说,lambda表达式使用也是必备技能。小编在项目中也用过一些简单lambda表达式,但是一般都是看网上人家怎么写,自己就跟着人家的写法,所以lambda使用局限性很大。为了打破这些局限性,小编详细学习了lambda使用,总结一下。

为什么lambda提供开发效率?

从匿名类到Lambda的转换;从使用匿名内部类作为参数传递,到使用lambda表达式作为参数传递

        //    从匿名类到Lambda的转换
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                //核心内容其实就一句
                System.out.println("Hello World!");
            }
        };

        //lambda表达式
        Runnable r2 = () -> System.out.println("Hello World!");
        
       //原来的匿名内部类做参数传递
        TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.compare(o1.length(), o2.length());
            }
        });
        // lambda表达式作为参数传递
        TreeSet<String> ts2 = new TreeSet<>((o1, o2) -> Integer.compare(o1.length(), o2.length()));

开发的简便程度基本上一目了然!!!

通过上述使用,看出lambda本质上到底是什么?

Lambda本质就是一个匿名函数,可以把lambda理解为一段可以传递的代码(将代码像数据一样进行传递)。从而写出更简洁,更灵活的代码。因为lambda代码风格变得更加紧凑,使得Java语言表达能力得到了提升。

Lambda表达式语法

Lambda表达式在java语言中引入一个新的语法元素和操作符。即“->”,这个操作符被称为Lambda操作符或剪头操作符,将lambda分为两部分

左侧:lambda所需要的所有参数

右侧:Lambda体,即Lambda表达式要执行的功能。

lambda表达式需要“函数式接口”的支持,接口中只有一个抽象方法的接口称为函数式接口,可以使用注解@FunctionalInterface检查接口是否是函数式接口。

Lambda使用语法

1、无参数,无返回值

()-> System.out.println("Hello World");

2、有一个参数,无返回值

(e)-> System.out.println(e);

3、当只有一个参数,参数的小括号可以省略

e-> System.out.println(e);

4、有两个参数,而且有返回值

BinaryOperator<Long> bo = (x,y)->{
    System.out.println("Hello World");
    return x+y;

}

5、Lambda体只有一条语句时,return与大括号可以省略

BinaryOperator<Long> bo = (x,y)->x+y;

6、数据类型可以省略,编译器可以推断得出,即称为“类型推断”


类型推断

    上述几种lambda语法中小编都没有写参数类型。主要原因是Lambda表达式中的参数类型都是由编译器推断得出的。Lambda表达式无需指定类型,程序依然可以编译,这是因为javac根据程序的上下文,在后台推断出了参数的类型。Lambda表达式依赖于上下文环境,是由编译器推断出来的。即为:类型推断。

    通过类型推断在一定程度上减少了开发负担,提供开发效率,减少了不必要一些错误!

总结

    lambda表达式就是开发者的红利,好好利用不仅能提升开发效率,还能增强程序的稳定性!由lambda引入就是函数式编程思想,也是未来发展方向,所以使用lambda是大势所趋!虽然上述讲了lambda的6种语法,但是并不复杂,个人上述六种用法归根结底就是能省则省!

    如有错误之处,恳请各位大神指正,小编不胜感激!

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mandy_i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值