Java学习:Lambda表达式

Posted cainiao-chuanqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习:Lambda表达式相关的知识,希望对你有一定的参考价值。

Lambda表达式

函数式编程思想概述
---强调做什么,而不是以什么形式做

面向对象的思想:

  • 做一件事情,找一个能解决这个的事情的对象,调用对象的方法,完成事情

函数式编程思想

  • 只要能获取到结果,谁去做的,这么做的都不重要,重视的是结果,不重视过程


传统写法和Lambda写法对比

传统写法

public class CaiNiao
    public static void main(String[] args)
        //匿名内部类,实现多线程
        //Runnable task = new Runnable()
        Runnable task = new Runnable()
            @Override
            public void run()//覆盖重写抽象方法
                System.out.println(Thread.currentThread().getName()+"新线程创建了");
                System.out.println("多线程任务执行!");
                
            
        ;
        new Thread(task).start();//开启线程
    
    
    

匿名内部类的好处与弊端

  • 一方面,匿名内部类可以帮助我们省去实现类的定义;
  • 另一方面,匿名内部类的语法确实太复杂了
public class CaiNiao
    public static void main(String[] args)
        //匿名内部类,实现多线程
        //Runnable task = new Runnable()
        new Thread(new Runnable()
            @Override
            public void run()//覆盖重写抽象方法
                System.out.println(Thread.currentThread().getName()+"新线程创建了");
                System.out.println("多线程任务执行!");
            
        ).start();//开启线程
    
    
    

Lambda写法

()->

public class CaiNiao
    public static void main(String[] args)
        //匿名内部类,实现多线程
        //Runnable task = new Runnable()
        new Thread(()->//覆盖重写抽象方法
                System.out.println(Thread.currentThread().getName()+"新线程创建了");
                System.out.println("多线程任务执行!");
            
        ).start();//开启线程
    
    
    

 

Lambda表达式的标准格式

由三部分组成:

  1. 一些参数
  2. 一个箭头
  3. 一段代码

格式:

  • (参数列表)-> 一些重写方法的代码:

解释说明格式:

  • ():接口中抽象方法的参数列表,没有参数,就空着
  • ->:传递的意思,把参数传递给方法体
  • :重写接口的抽象方法的方法体

Lambda表达式:是可推导,可以省略

  • 凡是根据上下文推导出来的内容,都可以省略书写

可以省略的内容

  1. (参数列表):括号中的参数列表的数据类型,可以省略不写
  2. (参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
  3. (一些代码):如果()中的代码只有一行,无论是否由返回值,都可以省略(,return,分号)

注意:要省略,return,分号必须一起省略

  • JDK1.7 版本之前,创建集合对象必须把前后的泛型都写上
  • JDK1.7 版本之后,=号后边的泛型可以省略,后边的泛型可以根据前边的泛型推导出来
    new Thread(()->//覆盖重写抽象方法
        System.out.println(Thread.currentThread().getName()+"新线程创建了");
    
).start();//开启线程
        
    new Thread(()->System.out.println(Thread.currentThread().getName()+"新线程创建了")).start();//开启线程

 

Lambda的使用前提

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法;
  2. 使用Lambda必须具有上下文推断。

备注:有且仅有一个抽象方法的接口,成为“函数式接口”。

以上是关于Java学习:Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记3.9.1 Lambda表达式 - Lambda表达式入门

Java学习笔记之 Lambda表达式

Java重温学习笔记,Java8新特性:Java Lambda 表达式

JAVA8学习——深入浅出Lambda表达式(学习过程)

Java学习:Lambda表达式

java8新特性——Lambda表达式