日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

發(fā)布時(shí)間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java 方法 示例

大家好,這是我在該博客上發(fā)表的有關(guān)Java 9功能的第一篇文章,今天您將了解我最喜歡的功能“收集的工廠方法” ,它是JEP 269的一部分。JEP代表JDK增強(qiáng)建議。 如果您曾經(jīng)在Groovy或Kotlin工作過(guò),那么您就會(huì)知道使用集合文字使用元素創(chuàng)建列表是多么容易,例如,創(chuàng)建1,2,3列表,您只需編寫(xiě)val items = listOf(1, 2, 3) 。 不幸的是,Java尚不支持Java,但是JDK 9中的工廠收集方法已經(jīng)改善了一切,幾乎就像那樣。 JDK在基本的Collection接口上添加了諸如of()類(lèi)of() 靜態(tài)工廠方法 ,您可以使用它們來(lái)創(chuàng)建項(xiàng)目列表。

盡管Project Jigsaw或Java Module系統(tǒng)是Java 9發(fā)行版的主要亮點(diǎn),但是從開(kāi)發(fā)的角度來(lái)看,還有其他一些有用的功能更有用,例如流程API附魔,Stream API增強(qiáng)以及Optional類(lèi)的一些有用方法,但是我最喜歡的API更改是Collection的工廠方法。

就像在Kotlin , Scala或Groovy中一樣,它使您可以在一行中創(chuàng)建值的列表,集合和值的映射:

List<String> list = List.of("Java", "Kotlin", "Groovy");

但是,唯一要注意的是,您可以創(chuàng)建不可修改或不可變的 List,Set或Map。

of()靜態(tài)工廠方法返回的List,Set或Map在結(jié)構(gòu)上是不可變的,這意味著一旦添加,就不能添加,刪除或更改元素。

調(diào)用任何mutator方法都將始終引發(fā)UnsupportedOperationException 。 但是,如果所包含的元素本身是可變的,則可能導(dǎo)致Collection的行為不一致或它的內(nèi)容似乎發(fā)生變化。

這與您在JDK 6或7中創(chuàng)建的不可修改列表相同,如下所示:

List<String> listOfString = new List<>(); listOfString.add("Java"); listOfString.add("Kotlin"); listOfString.add("Groovy"); listOfString.add("Scala"); listOfString = Collections.unmodifiableList(listOfString);

unmodifiableList()方法返回的列表也不支持添加,刪除或設(shè)置操作,如果調(diào)用它們,則拋出UnsupportedOperationException 。

兩種代碼之間的唯一區(qū)別是,更早的代碼需要6行以上的代碼才能創(chuàng)建不可變的Collection,例如不可變的List,Set或Map,但是現(xiàn)在您只需一行即可。

List接口上還有List.of()多個(gè)重載版本,例如,允許您創(chuàng)建1到10個(gè)元素的不可變列表,以及允許您創(chuàng)建任意數(shù)量的元素列表的可變參數(shù)方法 。

Set.of( )和Map.of()方法也是如此。 這是在Java 9中創(chuàng)建不可變Set的示例:

Set<Integer> primes = Set.of(2,3,5,7);

您會(huì)看到僅一行就可以創(chuàng)建一個(gè)不可變的Set。 同樣,要?jiǎng)?chuàng)建不可變Map,JDK 9提供了兩種方法Map.of(K k1, V v1)和Map.ofEntries()通過(guò)使用這兩種方法,您可以創(chuàng)建不可變條目的Map,例如

此方法已重載以創(chuàng)建最多10個(gè)鍵值對(duì)的映射,但是如果您需要更大的映射和更多映射,則應(yīng)使用Map.ofEntries()方法。

順便說(shuō)一句,您知道如何實(shí)現(xiàn)此功能嗎? 為何以前不可用? 如果查看JDK 9代碼或Javadoc,則會(huì)發(fā)現(xiàn)通過(guò)在Java Collection框架的關(guān)鍵接口(例如List,Set和Map)上添加靜態(tài)工廠方法來(lái)實(shí)現(xiàn)此功能。

在JDK 8之前這是不可能的,因?yàn)樵诮涌谏咸砑臃椒ㄒ馕吨茐乃锌蛻?hù)端,并且接口上不允許使用靜態(tài)方法。 在Java 8上,事情發(fā)生了變化,在接口上引入了默認(rèn) 方法和靜態(tài)方法 ,這為評(píng)估JDK API鋪平了道路。

我希望將來(lái)會(huì)有更多類(lèi)似的約定,使使用JDK API更加容易。

同樣,使用這些工廠方法時(shí),適用于使用不同集合的規(guī)則也將適用(正如您期望的那樣)。 因此,創(chuàng)建Set時(shí)不能傳遞重復(fù)元素,因?yàn)镾et不允許重復(fù) 。

同樣,創(chuàng)建Map時(shí)不能傳遞重復(fù)鍵,因?yàn)镸ap不允許重復(fù)鍵。 如果這樣做,則將IllegalArgumentException

另外,您不能將null值傳遞給collection factory方法,如果這樣做,請(qǐng)為Java異常NullPointerException做好準(zhǔn)備。

這就是如何在Java 9中創(chuàng)建不可變的列表,設(shè)置和映射的全部?jī)?nèi)容。 集合上的靜態(tài)方法確實(shí)使使用Java集合API變得更容易,至少現(xiàn)在它類(lèi)似于Kotlin或Groovy提供的東西。 JDK 9充滿(mǎn)了這樣有用的功能,請(qǐng)繼續(xù)關(guān)注此博客上的更多此類(lèi)文章。

您可能喜歡的其他Java和編程文章

  • Java開(kāi)發(fā)人員在2018年應(yīng)該學(xué)習(xí)的10件事
  • 20個(gè)Java開(kāi)發(fā)人員必備庫(kù)
  • Java程序員可以在2018年閱讀的20本書(shū)
  • 十大Java 9教程和課程–最好的
  • 5個(gè)免費(fèi)的Spring和Spring啟動(dòng)在線(xiàn)學(xué)習(xí)課程
  • Java和Web開(kāi)發(fā)人員的10個(gè)框架
  • 簡(jiǎn)單的Java 9新功能-概述(免費(fèi)課程)

感謝您到目前為止閱讀本文。 如果您喜歡此Java 9功能,請(qǐng)與您的朋友和同事分享。 如果您有任何問(wèn)題需要反饋,請(qǐng)留下注釋。

翻譯自: https://www.javacodegeeks.com/2018/02/java-9-example-factory-methods-collection-creating-unmodifiable-list-set-map.html

java 方法 示例

總結(jié)

以上是生活随笔為你收集整理的java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。