更新時間:2020-06-20 13:12:34 來源:動力節點 瀏覽2308次
Java語言在面向對象領域幾乎做到了極致,這篇文章根據官方文檔和各種資料的內容,介紹Java 9的幾個新的語言特性。
接口的私有方法
在前文《Java 8|接口的靜態方法和默認方法》中,介紹了Java 8為接口新增的默認方法。而在Java 9中,接口定義的私有方法可以擁有方法體。這一改進,可以幫助接口的默認方法復用代碼。比如Java 8的接口中可能存在一些重復的代碼,如下所示。
public?interface?Inter{
void?test();
default?void?check(){
System.out.println("check");
}
default?void?check(int?i){
System.out.println("check");
}}
在 Java 9 中,添加接口的私有方法,即可復用重復的代碼。
public?interface?Inter{
void?test();
default?void?check(){
common();
}
default?void?check(int?i){
common();
}
private?void?common(){
System.out.println("check");
}}
集合的工廠方法
Java 9新增了幾種集合的工廠方法,可以大大簡化集合的創建流程。使用工廠方法創建的集合不能再新增元素,如果新增元素,會報“
java.lang.UnsupportedOperationException”異常。在Java 8中,我們創建集合并添加元素的時候,可能會寫出如下的代碼,重復而繁瑣。
Set<Integer>?sets?=?new?Set<>();
sets.add(1);
sets.add(99);
sets.add(333);
List<String>?list?=?new?LinkedList<>();
list.add("hello");
list.add(",");
list.add("world");
在 Java 9 中,可以使用 of 方法直接創建集合并完成初始化。
Set<Integer> sets = Set.of(1,99,333);
List<String> list = List.of("hello",",","world");
改進的 Stream API
Java 9 為 Stream 新增了幾個方法:dropWhile、takeWhile、ofNullable,為 iterate 方法新增了一個重載方法。
takeWhile 和 dropWhile 方法用于從 Stream 中獲取一部分數據,接收一個 Predicate 來進行選擇。在有序的 Stream 中,takeWhile 返回從開頭開始的盡量多的元素;在無序的 Stream 中,takeWhile 返回從開頭開始的符合 Predicate 要求的元素的子集。而 dropWhile 的行為與 takeWhile 相反,返回剩余的元素。
在如下的代碼中,takeWhile 的篩選條件是數字小于 4,返回的是從開頭開始的小于 4 的數字,最后的數字不會返回。
List<Integer> nums = List.of(1,2,3,5,7,1,2,3);
List<Integer> sub = nums
?.stream()
?.takeWhile(n -> n < 4)
?.collect(Collectors.toList());
//jshell 執行結果 sub ==> [1, 2, 3]
List<Integer> sub2 = nums
?.stream()
?.dropWhile(n -> n < 4)
?.collect(Collectors.toList());
//jshell 執行結果 sub2 ==> [5, 7, 1, 2, 3]
Java 8 中 Stream 不能包含 null,否則會報空指針異常,而 Java 9 中的 ofNullable 方法允許我們創建一個單元素 Stream,可以包含一個非空元素,也可以創建一個空 Stream。
Stream<String> stream = Stream.ofNullable("hello,world");
System.out.println(stream.count());
//jshell 執行結果 1
stream = Stream.ofNullable(null);
System.out.println(stream.count());
//jshell 執行結果 0
在 Java 8 中,iterate 方法可以用于生成一個 Stream,但是 iterate 方法本身產生的結果是無限的,因此還需要使用 limit 方法來確定 Stream 的大小。如下的代碼,用于產生一個從 0 開始順序遞增的大小為 10 的 Stream。
List<Integer> numbers = Stream.iterate(0, i -> i+1)
.limit(10)
.collect(Collectors.toList());
在 Java 9 中新增了 iterate 的一個重載方法,第二個參數是一個 Predicate,可以用于控制返回 Stream 的大小。
//方法定義
static Stream iterate(T seed, Predicate hasNext, UnaryOperator next)
//使用示例
List<Integer> nums = Stream.iterate(0, i -> i < 10 ,i -> i+1)
.collect(Collectors.toList());
//jshell 執行結果 nums ==> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
以上就是動力節點java培訓機構的小編針對“Java9新特性之3 個語言新特性”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習