Java中lambda(λ)運算式的文法

來源:互聯網
上載者:User

標籤:技術   字典順序   分享圖片   col   lan   sage   png   star   else   

舉一個排序的例子,我們傳入代碼來檢查一個字串是否比另一個字串短。這裡要計算:

first.length() - second.length()

first和second是什嗎?他們都是字串。Java是一個強型別語言,所以我們還要指定他們的類型:

(String first, String second)    -> first.length() - second.length()

lambda運算式就是一個代碼塊,以及必須傳入代碼的變數規範。

你已經見過Java中的一種lambda運算式形式:參數,箭頭(->)以及一個運算式。如果代碼要完成的計算無法放在一個運算式中,就可以像寫方法一樣,把這些代碼放在{}中,並且包含顯式的return語句。例如:

(String first, String second) ->    {        if(first.length()<second.length()) return -1;        else if(first.length()>second.length()) return 1;        else return 0;    }

即使lambda運算式沒有參數,仍然要提供空括弧,就像無參數方法一樣:

() -> {for(int i=100; i>=0; i--) System.out.println(i);}

如果可以推匯出一個lambda運算式的參數類型,則可以忽略其類型。例如:

Comparator<String> comp    =(first,second) //same as (String first,String second)        ->first.length() - second.length();

在這裡,編譯器可以推匯出first和second必然是字串,因為這個lambda運算式將賦給一個字串比較器。

如果方法只有一個參數,而且這個參數的類型可以推匯出,那麼甚至可以省略小括弧:

ActionListener listener = event ->    System.out.println("The time is" + new Date());

無需指定lambda運算式的傳回型別。lambda運算式的傳回型別總是會由上下文推導得出。例如,下面的運算式

(String first, String second) -> first.length() - second.length()

可以在需要int類型結果的上下文中使用。

下面的Java代碼顯示了如何在一個比較子和一個動作監聽器中使用lambda運算式

package lambda;import java.util.Arrays;import java.util.Date;import javax.swing.JOptionPane;import javax.swing.Timer;public class LambdaTest {    public static void main(String[] args) {        String[] planets = new String[] { "zhangsan", "lisi", "wangwu",                 "zhaoliu", "xiaoming", "xiaohong", "xiaofang","quzi" };        System.out.println(Arrays.toString(planets));        System.out.println("按字典順序排序:");        Arrays.sort(planets);        System.out.println(Arrays.toString(planets));        System.out.println("按長度排序:");        Arrays.sort(planets, (first, second) -> first.length() - second.length());        System.out.println(Arrays.toString(planets));        Timer t = new Timer(1000, event -> System.out.println("The time is" + new Date()));        t.start();        // 保持程式的運行,直到使用者點擊“確定”        JOptionPane.showMessageDialog(null, "Quit program?");        System.exit(0);    }}

運行結果

Java中lambda(λ)運算式的文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.