Java Lambda 表示式
Java Lambda 表示式
Lambda 表示式是在 Java 8 中新增的。
Lambda 表示式是一個簡短的程式碼塊,它接受引數並返回一個值。Lambda 表示式類似於方法,但它們不需要名稱,並且可以直接在方法體中實現。
語法
最簡單的 lambda 表示式包含一個引數和一個表示式
parameter -> expression
要使用多個引數,請將它們用括號括起來
(parameter1, parameter2) -> expression
表示式是有限制的。它們必須立即返回一個值,並且不能包含變數、賦值或諸如 if
或 for
之類的語句。為了進行更復雜的操作,可以使用花括號括起來的程式碼塊。如果 lambda 表示式需要返回值,則程式碼塊應包含 return
語句。
(parameter1, parameter2) -> { code block }
使用 Lambda 表示式
Lambda 表示式通常作為引數傳遞給函式
示例
在 ArrayList
的 forEach()
方法中使用 lambda 表示式列印列表中的每個專案
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
如果變數的型別是隻有一個方法的介面,則 Lambda 表示式可以儲存在變數中。Lambda 表示式應具有與該方法相同數量的引數和相同的返回型別。Java 中內建了許多此類介面,例如列表使用的 Consumer
介面(在 java.util
包中)。
示例
使用 Java 的 Consumer
介面將 lambda 表示式儲存在變數中
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
要在方法中使用 lambda 表示式,該方法應具有一個引數,其型別為單方法介面。呼叫介面的方法將執行 lambda 表示式
示例
建立一個將 lambda 表示式作為引數的方法
interface StringFunction { String run(String str);
}public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
}public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);
}}