java 8 新特性

  今天在別人代碼中發現java8 新特性,發現本身閱讀代碼有點兒吃力,非常汗顏,java8新特性都出來這麼久了,只知其名不見其形,全部今天回家補了補知識。java

 

1、 接口sql

java8 中,接口中引入了新的關鍵字defaultstatic,經過使用default修飾方法,可讓咱們在接口中定義具體的方法實現,也可以使用static關鍵字來定義接口方法。express

public interface InterClass {
    String test1(String str);
    default String test2(String str){
        return "test2:" + str;
    }
    static String test3(String str){
        return "test3:" + str;
    }
}

2、Lamdba表達式編程

Lambda表達式的語法格式以下:數組

(params) -> expression    或     (params) -> {statements;}

Lambda(蘭布達)表達式,是推進Java 8 發佈的最重要的新特性,這意味着Java也開始認可了函數式編程。函數式編程的一個特色就是容許把函數自己做爲參數傳入另外一個函數,還容許返回一個函數。使用Lambda表達式可使代碼變的更加簡潔緊湊。app

下面代碼解釋了什麼是函數式接口編程:函數式編程

/**
 * 函數式接口
 * 函數式接口是值僅僅只包含一個抽象方法的接口(能夠有多個default和static方法),
 * 每個Lambda表達式都會匹配到這個方法。
 * jdk1.8 提供了 註解@FunctionalInterface來定義函數式接口
 */
@FunctionalInterface
public interface FunInterface {
    String test1(String str);
    /**若是包含多個抽象接口,編譯器會報錯
     * 如在定義一個抽象方法 String test2(String str);
     * 可是能夠定義任意多個的 default方法和 static方法
     */
    default String test3(String str){
        return "test3:" + str;
    }
    default String test4(String str){
        return "test4:" + str;
    }
    static String test5(String str){
        return "test5:" + str;
    }
    static String test6(String str){
        return "test6:" + str;
    }
}

測試:函數

public static void main(String args[]) {
    FunInterface funInterface = str -> "這是一個Lambda表達式";
    System.out.println(funInterface.test1(""));
    System.out.println(funInterface.test3("調用default方法"));
    System.out.println(FunInterface.test5("調用static方法"));
}

Lambda表達式的重要特徵:測試

  1. 可選類型聲明:不須要聲明參數類型,編譯器能夠統一識別參數值。
  2. 可選的參數圓括號:一個參數無需定義圓括號,但多個參數須要定義圓括號。
  3. 可選的大括號:若是主體包含了一個語句,就不須要使用大括號。
  4. 可選的返回關鍵字:若是主體只有一個表達式返回值,則編譯器會自動返回值,大括號須要指定表達式返回了一個數值。

Lambda表達式的變量做用域:this

  1. Lambda表達式只能引用標記爲 final的外層局部變量。
  2. Lambda表達式的局部變量能夠用聲明爲final,可是必須在後面的代碼中不能進行修改。
  3. Lambda表達式中不容許聲明一個與局部變量同名的參數或局部變量。

 

3、方法引用

Jdk1.8 提供了另外一種調用方式一對冒號( :: ),當你須要使用方法引用時,目標引用放在分隔符 :: 前,方法的名稱放在後面,及 ClassName::methodName,注意:調用構造函數引用爲ClassName::new

public class TestMethodAddr {
    @FunctionalInterface
    public interface FunInterface {
        TestMethodAddr getTestMethodAddr(String a,String b);
    }
    private String a;
    private String b;
    public TestMethodAddr(String a,String b){
        this.a = a;
        this.b = b;
    }
    public String addStr(){
        return a + b;
    }
    public String append(String c){
        return a + "," + b + "," + c;
    }

    public static void main(String[] args){
        FunInterface funInterface = TestMethodAddr::new;
        TestMethodAddr test = funInterface.getTestMethodAddr("A", "B");
        System.out.println(test.addStr());
        System.out.println(test.append("C"));
    }
}

4、Stream

Java 8 中添加了一個新的抽象稱爲流Stream,可讓你以一種聲明的方式處理數據。能夠將Stream看做一種流,流在管道中傳輸,而且能夠在管道的節點上進行處理,如排序、篩選、聚合運算等。

Stream是一個來自數據源的元素隊列並支持聚合操做。Stream提供了內部迭代的方法,經過訪問者模式(Visitor)實現(iteratorforeach爲外部迭代)

  1. 數據源:stream流的產生對象,能夠是集合、數組、IO channel等。
  2. 元素:指特定類型的對象,造成一個對象。
  3. 聚合操做:相似sql語句同樣的操做,好比filtermaplimitfindsorted等。

  4.1 生成流stream:使用方法stream() 爲集合建立串行流,parallelStream() 爲集合建立並行流。

  4.2 forEach:stream提供了新的方法 forEach來迭代流中的每一個數據。如:

  List list = Arrays.asList(1,2,3,4,5);
  list.stream().forEach(System.out::println);

  4.3 map:stream提供了map方法來用於映射每一個元素到對應的結果。如:

    List<Integer> list = Arrays.asList(1,2,3,4,5);
    list.stream().map(i -> i + i);
    list.stream().map(i -> i + i).forEach(System.out::println);

  4.4 filter: filter方法用於經過設置條件過濾出元素。如:

    List<Integer> list = Arrays.asList(1,2,3,4,5);
    // 過濾大於3的元素
    list.stream().filter(i -> i > 3).forEach(System.out::println);

  4.5 limit:limit方法用於獲取指定數量的流。如:

    List<Integer> list = Arrays.asList(1,2,3,4,5);
     // 獲取前 3個stream流
     list.stream().limit(3).forEach(System.out::println);

  4.6 Sorted:sorted方法用於對流進行排序。如:

     List<Integer> list = Arrays.asList(5,2,3,1,4);
     // 將list中的元素從小到大進行排序
     list.stream().sorted((a,b) -> (a > b ? 1 : -1)).forEach(System.out::println);

 

5、日期時間

新增各類日期時間處理類。

LocalDate爲日期處理類、LocalTime爲時間處理類、LocalDateTime爲日期時間處理類。

DateTimeFormatter格式化日期時間處理類。

相關文章
相關標籤/搜索