Java8-lambda表示式
阿新 • • 發佈:2022-03-26
Lambda 表示式的使用
1.舉例:
(o1, o2) -> Integer.compare(o1, o2)
2.格式:
- -> : Lambda操作符(箭頭操作符)
- ->左邊: Lambda形參列表(其實就是介面中的抽象方法的形參列表)
- ->右邊: Lambda體(其實就是接口裡重寫的抽象方法的方法體)
3.Lambda表示式的使用:(分為6種情況)
- 1、語法格式一: 無參,無返回值
- 2、語法規則二: Lambda表示式需要一個引數,但沒有返回值
- 3、語法規則三: 資料型別可以勝率,可由編譯器推斷,稱為“型別推斷”
- 4、語法規則四: 只有一個引數,小括號可以省略
- 5、語法規則五: 有兩個或多個引數,有多條語句,並可以有返回值
- 6、語法規則六: 當Lambda體只有一條語句時,return 與 括號若有,都可以省略
4.Lambda的實質:作為介面的例項
總結
- ->左邊:資料型別可以省略; 如果Lambda引數列表只有一個引數,那麼()可以省略
- ->右邊:Lambda體應該使用一對{}包裹,如果Lambda體只有一條語句(包括return語句)
那麼大括號和return語句可以省略
程式碼
public class LambdaTest1 { //語法格式一: 無參,無返回值 @Test public void test1(){ Runnable r1 = new Runnable() { @Override public void run() { System.out.println("測試一"); } }; r1.run(); System.out.println("********************"); Runnable r2 = () -> { System.out.println("測試一"); }; r2.run(); } //語法規則二: Lambda表示式需要一個引數,但沒有返回值 @Test public void test2(){ Consumer<String> con1 = new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }; Consumer<String> con2 = (String s) -> { System.out.println(s); }; con1.accept("測試二"); System.out.println("********************"); con2.accept("測試二"); } //語法規則三: 資料型別可以勝率,可由編譯器推斷,稱為“型別推斷” @Test public void test3(){ Consumer<String> con1 = new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }; Consumer<String> con2 = (s) -> { System.out.println(s); }; con1.accept("測試二"); System.out.println("********************"); con2.accept("測試二"); } //語法規則四: 只有一個引數,小括號可以省略 @Test public void test4(){ Consumer<String> con1 = new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }; Consumer<String> con2 = s -> { System.out.println(s); }; con1.accept("測試二"); System.out.println("********************"); con2.accept("測試二"); } //語法規則五: 有兩個或多個引數,有多條語句,並可以有返回值 @Test public void test5(){ Comparator<Integer> com1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { System.out.println(o1); System.out.println(o2); return o1.compareTo(o2); } }; Comparator<Integer> com2 = (o1,o2) -> { System.out.println(o1); System.out.println(o2); return o1.compareTo(o2); }; System.out.println(com1.compare(10,20)); System.out.println("********************"); System.out.println(com2.compare(10,20)); } //語法規則六: 當Lambda體只有一條語句時,return 與 括號若有,都可以省略 @Test public void test6(){ Comparator<Integer> com1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2); System.out.println(com1.compare(10,20)); System.out.println("********************"); System.out.println(com2.compare(10,20)); } }