Java8新特性

接口的默認方法

Java 8容許咱們給接口添加一個非抽象的方法實現,只須要使用 default關鍵字便可,這個特徵又叫作擴展方法,
示例以下:java

interface Formula{
    double Formula(int a);
    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}

Formula接口在擁有calculate方法以外同時還定義了sqrt方法,實現了Formula接口的子類只須要實現一個calculate方法,默認方法sqrt將在子類上能夠直接使用。api

Formula formula = new Formula() {
    @Override
    public double calculate(int a) {
        return sqrt(a * 100);
    }
};

formula.calculate(100);     // 100.0
formula.sqrt(16);           // 4.0

Lambda表達式

Lambda 表達式,也可稱爲閉包,容許把函數做爲一個參數,使代碼更簡潔。
Lambda表達式使用具有條件:閉包

  1. 有一個接口且只有一個A方法
  2. 把該接口對象充當B方法參數,靈活使用A方法
  3. 調用B方法,使用Lambda表達式實現A方法,充當匿名對象

傳統案例:ide

List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");

Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});

只須要給靜態方法 Collections.sort 傳入一個List對象以及一個比較器來按指定順序排列。一般作法都是建立一個匿名的比較器對象而後將其傳遞給sort方法。
在Java 8 中你就不必使用這種傳統的匿名對象的方式了,Java 8提供了更簡潔的語法,lambda表達式:函數

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});

// 對於函數體只有一行代碼的,能夠去掉大括號{}以及return關鍵字
Collections.sort(names, (String a, String b) -> b.compareTo(a)); 
//Java編譯器能夠自動推導出參數類型,因此你能夠不用再寫一次類型
Collections.sort(names, (a, b) -> b.compareTo(a));

//如果沒有參數  () ->{函數體} ()->單行函數體
//如果單個參數  a ->{函數體} a->單行函數體

Optional

Date API

相關文章
相關標籤/搜索