Lambda表达式。

函数式编程思想:

面向对象思想:做一件事,先找能解决这件事的对象,然后调用该对象相应方法。

面向过程思想:只要能获取到结果,怎么做的不重要,重视结果,不重视过程。

冗余的代码:

 public static void main(String[] args) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("新线程:"+
            Thread.currentThread().getName());
        }
    }).start();
    }

对于Runnable的匿名内部类用法可以分析出:

 0、Thread类需要Runnable接口作为参数,其中run()为核心代码。

1、为了指定run()方法体,就必须使用Runnable接口的实现类。

2、为了简化代码,可以用匿名内部类,但run()的方法名称,参数,返回值等也必须再写一遍

3、而实际上,只有run()方法体才是关键所在。

编程思想转化:做什么,而不是怎么做。

其实我们并不希望创建一个匿名内部类对象,只是不得不创建,我们真正希望做的事是:将run方法体的代码传给Thread类。

Lambda表达式:

JDK 1.8 新特性。

格式: 0、一些参数  1、一个箭头 2、一段代码。

(参数列表)->{ 重写方法的代码};

参数列表: 抽象方法的参数列表,有就写,没有就空着。

->: 传递,把参数传递给方法体。

{}: 重写抽象方法的方法体。

public static void main(String[] args) {
        new Thread(()->{
            System.out.println("创建新线程:"+Thread.currentThread().getName());

        }).start();
    }

简化lambda表达式:

lambda表达式是可推导,可省略。

0、(参数列表):数据类型可省略。

1、(参数列表):只有一个参数,()也可省略。

2、{代码} :只有一行,无论是否有返回值,{} ,return,分号 都可省略(要省略{},return

      和分号必须一起省略。

lambda的使用前提:

0、使用Lambda必须有接口,且要求接口只有一个抽象方法。

1、使用Lambda必须具有上下文推断,方法的参数或局部变量类型必须为Lambda对应的接口类型

有且只有一个抽象方法的接口  称为 【 函数式接口 】。

原文地址:https://www.cnblogs.com/zhangyuhao/p/10834076.html