今天開始學java(十七)java中的lambda表達式

Lambda的使用前提:
1、使用lambda必須具有接口,且要求接口中有且僅有一個抽象方法。
無論是JDK內置的Runnable、comparator接口還是自定義的接口,只有當接口中的抽象方法存在且唯一時纔可以使用Lambda

2、使用Lambda必須具有上下文推斷
也就是方法的參數活局部變量類型必須爲Lambda對應的接口類型,才能使用 Lambda作爲該接口的實例

按照Java8函數式接口的定義,其只能有一個抽象方法,否則就不是函數時接口,就無法用Lambda表達式。
可以使用@FunctionalInterface標註函數式接口,在編譯時提前發現錯誤。

有且僅有一個抽象方法的接口,稱爲“函數式接口”

前面的一對小括號,指run方法的參數括號,代表不需要任何條件
中間的一個箭頭表示將前面的參數傳遞給後面的代碼;
後面的輸出語句是業務邏輯代碼。

lambda表達式的標準格式,由三部分組成,
a.一些參數
b.一個箭頭
c.一段代碼
格式:
(參數列表) -> {一些重發方法的代碼};
解釋說明格式:
():接口中抽象方法的參數列表,沒有參數就不寫,多個參數使用逗號分隔
->:傳遞的意思,把參數傳遞給方法體,就是傳遞給大括號
{}:重寫接口的抽象方法的方法體
例子:

 //使用匿名內部類的方式實現多線程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "hello");
            }
        }).start();
        //使用lambda表達式實現多線程
        //括號是run方法的參數,意思是把括號中的參數傳到大括號的輸出語句
        new Thread(() ->{
                System.out.println(Thread.currentThread().getName() + "hello");}).start();

        //優化lambda
        new Thread(() -> System.out.println(Thread.currentThread().getName())).start();

Lambda表達式是可推到可省略的,凡是根據上下文推導出來的內容,可以省略書寫,可以省略的內容:
1、(參數列表):括號中參數列表的數據類型可以省略不寫
2、(參數類型):括號中的參數如果只有一個,那麼類型和()都可以省略
3、(一些代碼):如果()中的代碼只有一行,無論是否有返回值,都可以省略"()"、“return”、“分號”
注意:如果需要省略以上三個符號,這三個必須都要省略

簡化表達式例子:

首先創建一個接口,定義一個包含a,b兩個參數的方法calc,再使用匿名內部類重寫calc
    public static void main(String[] args) {
    invkoe(10, 20, new Calcuator() {
        @Override
        public int calc(int a, int b) {
            return a+b;
        }
    });
    invkoe(10,20,(int a,int b) -> {return a+b;});
    //簡化lambda方法
        invkoe(10,20,(a,b) -> a+b);
    }
      public static void invkoe(int a,int b,Calcuator c){
        int sum = c.calc(a,b);
          System.out.println(sum);
      }
發佈了77 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章