java Lambda表示式學習筆記
Lambda表示式的不同形式
Runnable noArguments = () -> System.out.println("Hello World");➊
ActionListener oneArgument = event -> System.out.println("button clicked");➋
Runnable multiStatement = () -> {➌ System.out.print("Hello"); System.out.println(" World"); };
BinaryOperator<Long> add = (x, y) -> x + y;➍
BinaryOperator<Long> addExplicit = (Long x, Long y) -> x + y;➎
➊中所示的Lambda表示式不包含引數,使用空括號()
表示沒有引數。該Lambda表示式實現了Runnable
介面,該介面也只有一個run
方法,沒有引數,且返回型別為void
。
➋中所示的Lambda表示式包含且只包含一個引數,可省略引數的括號,這和例2-2中的形式一樣。
Lambda表示式的主體不僅可以是一個表示式,而且也可以是一段程式碼塊,使用大括號({}
)將程式碼塊括起來,如➌所示。該程式碼塊和普通方法遵循的規則別無二致,可以用返回或丟擲異常來退出。只有一行程式碼的Lambda表示式也可使用大括號,用以明確Lambda表示式從何處開始、到哪裡結束。
Lambda表示式也可以表示包含多個引數的方法,如➍所示。這時就有必要思考怎樣去閱讀 該Lambda表示式。這行程式碼並不是將兩個數字相加,而是建立了一個函式,用來計算兩個數字相加的結果。變數add
的型別是BinaryOperator<Long>
,它不是兩個數字的和,而是將兩個數字相加的那行程式碼。
到目前為止,所有Lambda表示式中的引數型別都是由編譯器推斷得出的。這當然不錯,但有時最好也可以顯式宣告引數型別,此時就需要使用小括號將引數括起來,多個引數的情況也是如此。如➎所示。