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