Lambda 運算式 in java 8

來源:互聯網
上載者:User

標籤:return語句   轉換   格式   fun   value   組成   哈哈   system   類型轉換   

Lambda 運算式 in Java 8
  • Lambda運算式是java 8 新增的特性
  • Lambda運算式主要作用:支援將代碼塊作為方法參數,允許使用更簡潔的代碼建立函數式介面的執行個體,是匿名內部類的一種簡化,可以部分取代匿名內部類的作用。
  • 函數式介面:只有一個抽象方法的介面。
  • Lambda運算式又稱為匿名函數(anonymous function),表示一類無需定義標識符(函數名)的函數或者子程式,可以看做是一種文法糖
Lambda 運算式文法格式

Lambda運算式在java中由三部分組成:

  • 形參列表:形參列表允許省略形參類型,如果形參列表只有一個參數,形參列表外的圓括弧也可以省略
  • 箭頭->:箭頭不可省略
  • 代碼塊:如果代碼塊只有一條語句,允許省略代碼塊的花括弧;更有甚者,只有一條return語句,可以省略return關鍵字。
interface Eatable{    void taste();}interface Flyable{    void fly(String weathrer);}interface Addable{    int add(int a,int b);}public class LambdaTest {    public void eat(Eatable e) {        e.taste();        System.out.println(e);    }    public void fly(Flyable f) {        f.fly("好天氣");        System.out.println(f);    }    public void add(Addable a) {        System.out.println(a.add(5, 3));    }        public static void main(String[] args) {        LambdaTest test = new LambdaTest();        test.eat(()->System.out.println("蘋果"));        test.fly(weater->{            System.out.println("哈哈哈");            System.out.println("可以飛行");        });        // 省略形參類型 省略花括弧        test.add((a,b)->a+b);    }}
函數式介面
  • 函數式介面是指只包含一個抽象方法的介面,(可有其他預設方法(default修飾)或者類方法)java 8 中有大量的函數式介面如最常見的:Runnable,ActionListener,並提供了@FunctionInterface註解,告訴編譯器執行更嚴格的檢查。
Runnbale r =()->{    for(int i =0;i<100;i++){        System.out.println(i);    }}; // 注意分號
  • Lamdba 運算式的目標類型只能是函數式介面。
  • Lambda 運算式常應用情境:
    1. 將Lambda運算式賦值給函數式介面類型的變數
    2. 作為函數介面類型的參數傳給某個方法
    3. 使用函數式介面對Lambda運算式進行強制類型轉換
Object obj = (Runnable)()->{    System.out.println(...);};
方法引用和構造器引用
  • 應用情境:代碼塊只有一條語句,並且該語句為調用方法或者構造器
  • 應用目的:使Lambda運算式的文法更為簡潔
  • 應用方式:::
@FunctionalInterfaceinterface Converter{    Integer convert(String from);}// 類方法Converter con = from->Integer.valueOf(from);Converter con1 = Integer::valueOf;// 對象方法Converter con2 = from->"hhhh".indexOf(from);Converter con3 = "hhhh"::indexOf;// 構造器類似// ::new
Lambda運算式與匿名內部類的聯絡和區別
  • Lambda運算式簡化了部分匿名內部類的寫法(函數式介面),表現性質和匿名內部類一致,可以訪問effective final局部變數,和外部類成員變數
  • 匿名內部類的應用範圍更廣,它可以為任何介面建立執行個體,也可以服務於抽象類別和普通類
  • 注意Lambda運算式的代碼塊不允許調用介面中定義的預設方法

Lambda 運算式 in java 8

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.