Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射
大家好,這是我在該博客上發(fā)表的有關Java 9功能的第一篇文章,今天您將了解我最喜歡的功能“收集的工廠方法” ,它是JEP 269的一部分。JEP代表JDK增強建議。 如果您曾經在Groovy或Kotlin工作過,那么您就會知道使用集合文字使用元素創(chuàng)建列表很容易,例如創(chuàng)建1、2、3的列表,您只需編寫val items = listOf(1, 2, 3) 。 不幸的是,Java尚不支持它,但是JDK 9中的工廠收集方法已經改進了一切,并且?guī)缀蹙褪沁@樣。 JDK在基本的Collection接口上添加了諸如of()類of() 靜態(tài)工廠方法 ,您可以使用它們來創(chuàng)建項目列表。
盡管Project Jigsaw或Java Module系統(tǒng)是Java 9發(fā)行版的主要亮點,但從開發(fā)的角度來看,還有其他一些有用的功能更有用,例如流程API附魔,Stream API增強以及Optional類的一些有用方法,但是我最喜歡的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在結構上是不可變的,這意味著添加后就不能添加,刪除或更改元素。
調用任何mutator方法將始終導致拋出UnsupportedOperationException 。 但是,如果所包含的元素本身是可變的,則可能導致Collection的行為不一致或它的內容似乎發(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()方法返回的列表也不支持添加,刪除或設置操作,如果調用它們,則拋出UnsupportedOperationException 。
兩種代碼之間的唯一區(qū)別是,更早的代碼需要6行以上的代碼才能創(chuàng)建不可變的Collection,例如不可變的List,Set或Map,但是現(xiàn)在您只需一行即可。
List接口上還有List.of()多個重載版本,例如,允許您創(chuàng)建1到10個元素的不可變列表,以及允許您創(chuàng)建任意數(shù)量的元素的可變參數(shù)方法 。
Set.of( )和Map.of()方法也是如此。 這是在Java 9中創(chuàng)建不可變Set的示例:
Set<Integer> primes = Set.of(2,3,5,7);您會看到您可以在一行中創(chuàng)建一個不可變的Set。 同樣,要創(chuàng)建不可變Map,JDK 9提供了兩種方法Map.of(K k1, V v1)和Map.ofEntries()通過使用這兩種方法,您可以創(chuàng)建不可變條目的Map,例如
重載此方法可以創(chuàng)建最多10個鍵值對的映射,但是如果您需要更大的映射和更多的映射,則應使用Map.ofEntries()方法。
順便說一句,您知道如何實現(xiàn)此功能嗎? 為何以前不可用? 如果查看JDK 9代碼或Javadoc,則會發(fā)現(xiàn)此功能是通過在Java Collection框架的關鍵接口(例如List,Set和Map)上添加靜態(tài)工廠方法來實現(xiàn)的。
在JDK 8之前這是不可能的,因為在接口上添加方法意味著破壞所有客戶端,并且接口上不允許使用靜態(tài)方法。 在Java 8上,事情發(fā)生了變化,在接口上引入了默認和靜態(tài)方法 ,這為評估JDK API鋪平了道路。
我希望將來會有更多類似的約定,使使用JDK API更加容易。
同樣,使用這些工廠方法時,適用于使用不同集合的規(guī)則也將適用(正如您期望的那樣)。 因此,創(chuàng)建Set時不能傳遞重復元素,因為Set不允許重復 。
同樣,創(chuàng)建Map時不能傳遞重復鍵,因為Map不允許重復鍵。 如果這樣做,則將IllegalArgumentException
同樣,您不能將null值傳遞給collection factory方法,如果這樣做,請為Java異常NullPointerException做好準備。
這就是如何在Java 9中創(chuàng)建不可變的列表,設置和映射的全部內容。 集合上的靜態(tài)方法確實使使用Java集合API變得更容易,至少現(xiàn)在它類似于Kotlin或Groovy提供的東西。 JDK 9充滿了這樣有用的功能,請繼續(xù)關注此博客上的更多此類文章。
您可能喜歡的其他Java和編程文章
- Java開發(fā)人員在2018年應該學習的10件事
- 20個Java開發(fā)人員必備庫
- Java程序員可以在2018年閱讀的20本書
- 十大Java 9教程和課程–最好的
- 5個免費的Spring和Spring啟動在線學習課程
- Java和Web開發(fā)人員的10個框架
- 簡單的Java 9新功能-概述(免費課程)
感謝您到目前為止閱讀本文。 如果您喜歡此Java 9功能,請與您的朋友和同事分享。 如果您有任何問題需要反饋,請留下注釋。
翻譯自: https://www.javacodegeeks.com/2018/02/java-9-example-factory-methods-collection-creating-unmodifiable-list-set-map.html
總結
以上是生活随笔為你收集整理的Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 首个JDK 10(18.3)发行候选版(
- 下一篇: java 模板方法设计模式_Java中的