1. 程式人生 > >java8新特性之Lambda表達式入門

java8新特性之Lambda表達式入門

java8新特性 obj 返回值 報錯 java8 虛擬 ret UNC bject

一 什麽是Lambda表達式
  Lambda表達式:可以讓你的代碼更加的簡潔。ambda無法單獨出現,需要一個函數式接口來盛放,可以說lambda表達式方法體是函數式接口的實現,lambda實例化函數式接口,可以將函數作為方法參數,或者將代碼作為數據對待。

二 Lambda表達式特性
  首先我們得知道函數式接口是什麽。
  函數式接口(Functional Interfaces):如果一個接口定義個唯一一個抽象方法,那麽這個接口就成為函數式接口。同時,引入了一個新的註解:@FunctionalInterface。可以把他它放在一個接口前,表示這個接口是一個函數式接口。這個註解是非必須的,只要接口只包含一個方法的接口,虛擬機會自動判斷,不過最好在接口上使用註解 @FunctionalInterface 進行聲明。在接口中添加了 @FunctionalInterface 的接口,只允許有一個抽象方法,否則編譯器也會報錯。


  Lambda表達式的語法格式:

    1.Lambda表達式使用 () 表示沒有參數。
2.如果Lambda表達式中只包含一個參數,可省略掉 () 。
3.如果Lambda表達式的主題是一段代碼塊,需要使用 {} ,該代碼塊與普通的Java代碼塊並無區別,也可以返回或拋出異常。
4.如果參數的類型可以由編譯器推斷得出可以省略參數類型,當然你也可以加上。
5.可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。

  常見的寫法:

   (a) -> a * a
(int a, int b) -> a + b
(a, b) -> {return a - b;}
() -> System.out.println(Thread.currentThread().getId())

三.方法引用
  
在lambda表達式中,方法引用是一種簡化寫法,引用的方法就是Lambda表達式的方法體的實現

語法結構:ObjectRef:: methodName
左邊是類名或者實例名,中間的“::”是方法引用符號,右邊是相應的方法名
方法引用一般分為三類:
靜態方法引用,實例方法引用,構造方法引用

四.串行stream操作

什麽是 Stream ? 這裏的 Stream 不同於 io 中的 InputStream 和 OutputStream,Stream 位於包 java.util.stream 中, 也是 java 8 新加入的,Stream 只的是一組支持串行並行聚合操作的元素,可以理解為集合或者叠代器的增強版。什麽是聚合操作?簡單舉例來說常見的有平均值、最大值、最小值、總和、排序、過濾等。

  Stream 的幾個特征
    單次處理。一次處理結束後,當前Stream就關閉了。
    支持並行操作
    常見的獲取 Stream 的方式
    從集合中獲取
      Collection.stream();
      Collection.parallelStream();

  stream這個特性十分實用,在平常serviceImpl中可以方便的對sql取到的數據進行處理而不必去手動寫大量的邏輯,相當於Mybatis和Mysql在service層的操作。

五.實戰

  目前項目中正好用的為java8,可以嘗試在項目中先用到,慢慢摸索。有待更新...........

java8新特性之Lambda表達式入門