大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java9新特性之3 個(gè)語(yǔ)言新特性

Java9新特性之3 個(gè)語(yǔ)言新特性

更新時(shí)間:2020-06-20 13:12:34 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2241次

Java語(yǔ)言在面向?qū)ο箢I(lǐng)域幾乎做到了極致,這篇文章根據(jù)官方文檔和各種資料的內(nèi)容,介紹Java 9的幾個(gè)新的語(yǔ)言特性。

Java9新特性之3 個(gè)語(yǔ)言新特性

接口的私有方法

在前文《Java 8|接口的靜態(tài)方法和默認(rèn)方法》中,介紹了Java 8為接口新增的默認(rèn)方法。而在Java 9中,接口定義的私有方法可以擁有方法體。這一改進(jìn),可以幫助接口的默認(rèn)方法復(fù)用代碼。比如Java 8的接口中可能存在一些重復(fù)的代碼,如下所示。

public?interface?Inter{
void?test();
default?void?check(){
System.out.println("check");
}
default?void?check(int?i){
System.out.println("check");	
}}

在 Java 9 中,添加接口的私有方法,即可復(fù)用重復(fù)的代碼。

public?interface?Inter{
void?test();
default?void?check(){
common();
}
default?void?check(int?i){
common();		
}
private?void?common(){
System.out.println("check");
}}

集合的工廠方法

Java 9新增了幾種集合的工廠方法,可以大大簡(jiǎn)化集合的創(chuàng)建流程。使用工廠方法創(chuàng)建的集合不能再新增元素,如果新增元素,會(huì)報(bào)“

java.lang.UnsupportedOperationException”異常。在Java 8中,我們創(chuàng)建集合并添加元素的時(shí)候,可能會(huì)寫出如下的代碼,重復(fù)而繁瑣。

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 方法直接創(chuàng)建集合并完成初始化。

Set<Integer> sets = Set.of(1,99,333);

List<String> list = List.of("hello",",","world");

改進(jìn)的 Stream API

Java 9 為 Stream 新增了幾個(gè)方法:dropWhile、takeWhile、ofNullable,為 iterate 方法新增了一個(gè)重載方法。

takeWhile 和 dropWhile 方法用于從 Stream 中獲取一部分?jǐn)?shù)據(jù),接收一個(gè) Predicate 來(lái)進(jìn)行選擇。在有序的 Stream 中,takeWhile 返回從開頭開始的盡量多的元素;在無(wú)序的 Stream 中,takeWhile 返回從開頭開始的符合 Predicate 要求的元素的子集。而 dropWhile 的行為與 takeWhile 相反,返回剩余的元素。

在如下的代碼中,takeWhile 的篩選條件是數(shù)字小于 4,返回的是從開頭開始的小于 4 的數(shù)字,最后的數(shù)字不會(huì)返回。

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 執(zhí)行結(jié)果 sub ==> [1, 2, 3]
List<Integer> sub2 = nums
?.stream()
?.dropWhile(n -> n < 4)
?.collect(Collectors.toList());
//jshell 執(zhí)行結(jié)果 sub2 ==> [5, 7, 1, 2, 3]

Java 8 中 Stream 不能包含 null,否則會(huì)報(bào)空指針異常,而 Java 9 中的 ofNullable 方法允許我們創(chuàng)建一個(gè)單元素 Stream,可以包含一個(gè)非空元素,也可以創(chuàng)建一個(gè)空 Stream。

Stream<String> stream = Stream.ofNullable("hello,world");
System.out.println(stream.count());
//jshell 執(zhí)行結(jié)果 1
stream = Stream.ofNullable(null);
System.out.println(stream.count());
//jshell 執(zhí)行結(jié)果 0

在 Java 8 中,iterate 方法可以用于生成一個(gè) Stream,但是 iterate 方法本身產(chǎn)生的結(jié)果是無(wú)限的,因此還需要使用 limit 方法來(lái)確定 Stream 的大小。如下的代碼,用于產(chǎn)生一個(gè)從 0 開始順序遞增的大小為 10 的 Stream。

List<Integer> numbers = Stream.iterate(0, i -> i+1)
.limit(10)
.collect(Collectors.toList());

在 Java 9 中新增了 iterate 的一個(gè)重載方法,第二個(gè)參數(shù)是一個(gè) 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 執(zhí)行結(jié)果 nums ==> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java9新特性之3 個(gè)語(yǔ)言新特性”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美性猛交ⅹxxx乱大交按摩 | 亚洲精品成人 | 日日影院| 国产成人夜间影院在线观看 | 成人综合久久综合 | 欧美精品综合 | 国产日韩在线 | 欧美日韩亚洲综合久久久 | 国产精自产拍久久久久久蜜 | 亚洲精品一区二区三区www | 亚洲精品欧美一区二区三区 | 精品久久久久久久一区二区伦理 | 热热涩热热狠狠色香蕉综合 | 国产福利小视频在线观看 | 天天操天天射天天色 | 国产一区在线观看免费 | 青草免费免费观看视频在线 | 国产精品suv一区二区 | 男人猛躁女人成人免费视频 | 精品国产调教最大网站女王 | 伊人久久一本大道 | 日韩欧美一级毛片精品6 | 亚洲精品日韩中文字幕久久久 | 午夜久久免影院欧洲 | 四虎影院2019| 精品91在线 | 国产爱久久久精品 | 日韩欧美精品一区二区 | 四虎在线免费观看视频 | 伊人成人在线视频 | 99热在线观看免费 | 国产精品四虎在线观看免费 | 毛片日韩| 一级特黄aaaaaa大片 | 成人国内精品久久久久影 | 国产精品久久久久久一区二区 | 亚洲精品久久麻豆蜜桃 | 国产a级高清版毛片 | 亚洲成人在线免费观看 | 亚洲精品国产一区二区 | 欧美高清性粉嫩交 |