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必須具有上下文推斷。

備注:有且僅有一個抽象方法的接口,成為“函數式接口”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM