jdk1.8 新特性之 如何寫lambda表示式

jerry010_1發表於2018-07-23

語法

lambda表示式的特點,它的語法如下面。

parameter -> expression body

下面是一個lambda表示式的重要特徵。

  • 可選型別宣告 - 無需宣告引數的型別。編譯器可以從該引數的值推斷。

  • 可選圓括號引數 - 無需在括號中宣告引數。對於多個引數,括號是必需的。

  • 可選大括號 - 表示式主體沒有必要使用大括號,如果主體中含有一個單獨的語句。

  • 可選return關鍵字 - 編譯器會自動返回值,如果主體有一個表示式返回的值。花括號是必需的,以表明表示式返回一個值

    lambda表示式的基本語法形式:()->方法體。

    而在整個java之中,對於lambda表示式一共定義了有三類語法:

    (params) -> 單行語句;

    (params) ->表示式;

    (params) ->{多行語句};

  • Lambada表示式例子

  • () -> {}                     // 沒有引數,沒有返回值

    () -> 42                     // 沒有引數,方法體有表示式
    () -> null                   // 沒有引數,方法體有表示式
    () -> { return 42; }         // 沒有引數,方法體有返回值
    () -> { System.gc(); }       // 沒有引數,有方法體

    // 有多種返回值
    () -> {
      if (true) return 10;
      else {
        int result = 15;
        for (int i = 1; i < 10; i++)
          result *= i;
        return result;
      }
    }                          

    (int x) -> x+1             // 單個引數
    (int x) -> { return x+1; } // 單個引數,跟上面一樣
    (x) -> x+1                 // 單個引數,跟下面一樣
    x -> x+1                   

    (String s) -> s.length()   
    (Thread t) -> { t.start(); } 
    s -> s.length()              
    t -> { t.start(); }          

    (int x, int y) -> x+y      // 多個引數,有返回值
    (x,y) -> x+y               // 跟上面一樣
    (x, final y) -> x+y        // 多個引數,有不能修改的引數
    (x, int y) -> x+y          // 這個是非法的,不能混合寫

  • 結合以上的呼叫格式

  • 在程式中更加有效的去構建自己的程式程式碼

  •  

相關文章