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();
}

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