1. 程式人生 > 其它 >Java8-lambda表示式

Java8-lambda表示式

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));
    }




}