天天看點

JDK8 新特性總結JDK8 新特性總結一、Lambda 表達式總結

JDK8 新特性總結

Java8 新增了非常多的特性,我們主要讨論以下幾個:

- Lambda 表達式

- 函數式接口

- 方法引用 / 構造器引用

- Stream API

- 接口中的預設方法 / 靜态方法

- Optional 類

- 新時間日期 API

- Base64

- 其他新特性(Nashorn JavaScript)

文章目錄

  • JDK8 新特性總結
  • 一、Lambda 表達式
    • Lambda文法
    • 哪裡使用lambda
    • @FunctionalInterface
  • 總結

一、Lambda 表達式

Lambda文法

一行執行語句的寫法:

(parameters) -> expression

//當隻有一個參數時,可省略括号

如果有多行執行語句,可以加上{}

(parameters) -> { statements; }

另外Lambda表達式可以省略參數類型及return:

// 指定參數類型及return

(int x, int y) -> { return x + y; }

// 指定參數類型,不指定return

(int x, int y) -> x + y;

// 不指定參數類型和return,編譯器會自動推斷

(x, y) -> x + y;

tips:

當lambda實作的抽象方法需要return結果時,expression可了解成要被return的單條結果傳回語句。

statements則是等價于方法體中的表達式,需要滿足相應文法要求。

(a,b) -> ab // 滿足expression

(a,b) -> a=b=ab // 滿足expression

(a,b) -> return ab //這種就是錯誤的,等價于 return return ab

(a,b) -> { return ab; } // 滿足statements,普通寫法

(a,b)-> { ab; } // 這句話是錯的,因為 ee 不是 statement, 而是 expression

// 下面是多表達式的情況,傳回的值是顯示指明 return 的地方

(int e) -> {

e = 11;

return e*3;

}

哪裡使用lambda

  • 你可以在函數式接口上使用Lambda表達式(函數式接口就是隻定義一個抽象方法的接口。例如Comparator和Runnable)
  • Lambda表達式允許你直接以内聯的形式為函數式接口的抽象方法提供實作,并把整個表達式作為函數式接口的執行個體。

@FunctionalInterface

為了確定接口可以使用lambda表達式,java新增加了一個注解,@FunctionalInterface,用這個注解修飾一個接口,這個接口隻能有一個抽象的方法。這類接口稱為函數式接口。

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}
           

但因為java中的接口增強了(在接口中可以使用預設方法和靜态方法),這兩個方法都不是抽象的,是以說用@FunctionalInterface修飾的接口還是可以包含這兩類方法的。但如果定義多個抽象方法,編譯器就會報錯。

@FunctionalInterface
interface IInner {
    void printInt(int x);
    default void moren(){
        System.out.println("defalut");
    }

    static void jingtai() {
        System.out.println("static");
    }
    void printString(); 
}
           
JDK8 新特性總結JDK8 新特性總結一、Lambda 表達式總結

總結

提示:這裡對文章進行總結:

例如:以上就是今天要講的内容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理資料的函數和方法。