JAVA8新特性[第一季]-Lambda表达式简介

版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/liudongdong0909。 https://blog.csdn.net/liudongdong0909/article/details/77097018

相关源码地址:https://github.com/liudongdong0909/java8/tree/master/java8-Lambda/src/com/donggua

从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。 很长一段时间java被吐槽是冗余和缺乏函数式编程能力的语言,随着函数式编程的流行java8种也引入了 这种编程风格。在此之前我们都在写匿名内部类干这些事,但有时候这不是好的做法,本文中将介绍和使用lambda, 带你体验函数式编程的魔力。

一、JAVA8 新特性简介

  1. 速度更快

  2. 代码更少(增加了新的语法 Lambda 表达式)

  3. 强大的 Stream API

  4. 便于并行

  5. 最大化减少空指针异常 Optional

二、为什么使用Lambda表达式

  • Lambda 是一个 匿名函数, 我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更加紧凑的代码风格,使JAVA的语言表达能力得到了提升。

三、 栗子最能说明问题

3.1 第一个栗子:

未使用 Lambda 表达式之前的TreeSet中元素排序的方法(根据长度排序)– 匿名内部类

@Test
public void test(){
        // 按长度排序 -- // 使用匿名内部类作为参数传递
        Comparator<String> comparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.compare(o1.length(), o2.length());
            }
        };

        TreeSet<String> treeSet = new TreeSet<>(comparator);
    }

使用Lambda表达式之后:

@Test
    public void test2(){
        // 使用 Lambda 表达式作为参数传递
        Comparator<String> comparator = (x, y) -> Integer.compare(x.length(), y.length());

        TreeSet<String> treeSet = new TreeSet<>(comparator);
    }

3.2 第二个栗子:

再比如我们在java7中创建一个线程

Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello word");
            }
        };
runnable.run();

使用Lambda表达式创建一个线程

 Runnable runnable2 = () -> System.out.println("hello word lambda");
 runnable2.run();

执行结果:

这里写图片描述

四、 Lambda 表达式的基础语法

Lambda 基础语法: java8中引入了一个新的操作符 “->”, 该操作符称为 箭头操作符 或者 Lambda操作符

这里写图片描述

Lanbda 操作符将Lambda 表达式拆分成两部分
左侧: Lambda 表达式需要的所有参数列表
右侧: Lambda 表达式要执行的功能, 即Lambda 体, 方法体

五、Lambda 表达式语法格式

5.1 语法格式一: 无参, 无返回值, Lambda体只需要一条语句

这里写图片描述

5.2 语法格式二: Lambda 需要一个参数

这里写图片描述

5.3 语法格式三 : Lambda只需要一个参数时,Lambda操作符左侧参数的小括号可以省略

这里写图片描述

5.4 语法格式四: Lambda 需要两个参数, 并且有返回值

这里写图片描述

5.5 语法格式五: 当Lambda体只有一条语句时, return 与 大括号可以省略

这里写图片描述

5.6 语法格式六: Lambda 操作符左侧的参数列表的数据类型可以省略

这里写图片描述

六、Lambda 表达式中的类型推断

类型推断: 上面案例中, Lambda 表达式中的参数类型都是由编译器推断得出的。 Lambda 表达式中无需指定类型, 程序依然可以编译, 这是因为 javac 根据程序的上下文, 在后台推断出了参数的类型。 Lambda 表达式的类型依赖于上下文环境, 是由编译器推断出来的。这就是所谓的 – 类型推断

相关源码地址:https://github.com/liudongdong0909/java8/tree/master/java8-Lambda/src/com/donggua

以上就是全文的内容,由于水平有限,文章中难免会有错误,希望大家指正。谢谢~

猜你喜欢

转载自blog.csdn.net/liudongdong0909/article/details/77097018
今日推荐