学习笔记一 Java8新特性概述之Lambda表达式

  Java8带来了一系列令人耳目一新的语言特性,其中最重要的就是接受了函数式编程的风格。Lambda表达式、接口的演变、库的重构、支持流数据处理、新的并行处理等新概念是其中最大的变化。
  在具体介绍这些概念之前,我们先用一些简单的例子来看看到底什么是Lambda表达式。
1、Runnable例子
  我们先用传统的方式来创建一个Runnable实例以及一个运行该接口的线程。

Runnable oldRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("do something");
            doSomething();
        }
    };

  启用线程执行该接口:

new Thread(oldRunnable).start();

  从上面的代码可以看出,为了实现我们想要的逻辑,我们必须先实现这个Runnable接口,把相关代码封装在run方法里面,然后再创建一个线程去启动接口的执行。
2 、匿名类
  另一种方式是使用匿名类。这儿我们不必去实例化Runnable接口而是直接使用内联的匿名类。

new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("do something");
                doSomething();
            }
        }).start();

  比较这两种写法,我们可以看出,匿名类相对第一种写法仅仅是减少了变量的定义,整个逻辑其实并没有区别,我们真正想要执行的doSomething()仍然是隐晦的,被其他多余的代码所干扰。
3、使用Lambda表达式
  我们先不说关于Lambda表达式太多的细节,而是先看下上面的逻辑如何使用Lambda来替换。

// 创建Lambda表达式
Runnable doSomethingLambda = () -> doSomething();

// 创建线程执行
new Thread(doSomethingLambda).start();

  我们创建了第一个Lambda表达式直接调用我们想要执行的方法,把这个表达式赋值给Runnable变量,然后把这个变量作为Thread的入参。这样代码不仅清晰而且简洁,直接体现了想要执行的逻辑意图,省去了其他的干扰。
  另一种写法:

new Thread(() -> {
            System.out.println("do something");
            doSomething();
        }).start();

  我们可以看到Thread直接收到一段代码作为入参,而不需要创建Runnable变量。
  现在如果你想要做另一件事情,你可以很容易地实现:

new Thread(() -> doOtherThing()).start();

  这种我们传递代码像以前传递数据一样的使用方式,在Java8之前是不支持的。

你可能感兴趣的:(学习笔记一 Java8新特性概述之Lambda表达式)