java8新特性之Lambda表達式

Lambda表達式

Lambda是一個匿名函數,咱們能夠把Lambda表達式理解爲是一段能夠傳遞的代碼(將代碼像數據同樣進行傳遞)。能夠寫出更簡潔、更靈活的代碼。做爲一種更緊湊的代碼風格,是Java的語言表達能力獲得了提高。(能夠理解爲是對接口的一段實現代碼)

Lambda表達式初體驗

開一個線程,打印hello lambda!
// 開一個線程 打印 hello
    @Test
    public void test00() {
        // 以前的寫法
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello lambda!");
            }
        });
        thread.run();
        // lambda寫法
        Thread thread1 = new Thread(() -> System.out.println("hello lambda!"));
        thread1.run();
    }
看起來Lambda表達式寫起來是否是更加優雅,簡短。

Lambda表達式語法

Lambda表達式在Java 語言中引入了一個新的語法元素和操做符。這個操做符爲 「->」 , 該操做符被稱 爲Lambda操做符或箭頭操做符。它將 Lambda 分爲 兩個部分,左側:指定了Lambda表達式須要的全部參數 右側:指定了Lambda體,即Lambda表達式要執行的功能

語法格式一

Lambda表達式不須要參數時候,沒有返回值時,Lambda體只須要一條語句
@Test
    public void test01() {
        //  Runnable 接口 線程的接口
        Runnable runnable = () -> System.out.println("hello lambda!");
        // 調用方法
        runnable.run();
    }

語法格式二

Lambda體,沒有返回值,須要一個參數
@Test
    public void test02() {
        //  Consumer 接口 1.8纔有的 表示接受單個輸入參數而且不返回任何值的一個操做
        Consumer consumer = (msg) -> System.out.println(msg);
        // 調用方法  accept接收任意參數 T
        consumer.accept("hello lambda!");
    }

語法格式三

Lambda體,沒有返回值,須要一個參數時,參數的小括號能夠省略
@Test
    public void test03() {
        //  Consumer 接口 1.8纔有的 表示接受單個輸入參數而且不返回任何值的一個操做
        Consumer consumer = msg -> System.out.println(msg);
        // 調用方法  accept接收任意參數 T
        consumer.accept("hello lambda!");
    }

語法格式四

Lambda體,沒有返回值,須要兩個參數時,而且有返回值
@Test
    public void test04() {
       // Comparator 接口 一個比較的操做
        Comparator<Integer> comparator = (Integer x, Integer y) -> {
            System.out.println("實現接口的方法:");
            //   這裏調用了 Integer  compare 比較方法 比較兩個值的大小 返回 -1(<) 0(=) 1(>)
            return Integer.compare(x, y);
        };
        //  調用方法
        System.out.println(comparator.compare(12, 13));
    }

語法格式五

Lambda體只有一條語句時,有返回值時,return與大括號能夠省略
@Test
    public void test05() {
        // Comparator 接口 一個比較的操做
        //   這裏調用了 Integer  compare 比較方法 比較兩個值的大小 返回 -1(<) 0(=) 1(>)
        Comparator<Integer> comparator = (Integer x, Integer y) -> Integer.compare(x, y);
        //  調用方法
        System.out.println(comparator.compare(12, 13));
    }

語法格式六

Lambda表達式的參數類型能夠省略,可由編譯器根據上下文推斷得出類型:類型推斷
@Test
    public void test06() {
        // Comparator 接口 一個比較的操做 
        Comparator<Integer> comparator = (x, y) -> {
            // (x,y) 數據類型能夠省略,可由編譯器根據上下文推斷得出類型,
            System.out.println("實現接口的方法:");
            //這裏調用了 Integer  compare 比較方法 比較兩個值的大小 返回 -1(<) 0(=) 1(>)
            return Integer.compare(x, y);
        };
        //  調用方法
        System.out.println(comparator.compare(12, 13));
    }

個人小結

lambda表達式像是一個代碼片斷,由 ‘->’(箭頭操做符)分爲兩部分,左側爲參數列表,參數類型能夠省略不寫,右側爲lambda體,其實就是接口的實現代碼。

文章首發於 黑貓のBlog 歡迎來留言啊!!!java

相關文章
相關標籤/搜索