一分鐘學(xué)會一行代碼創(chuàng)建不可變集合!
在Java 9中又新增了一些API來幫助便捷的創(chuàng)建不可變集合,以減少代碼復(fù)雜度。
本期配套視頻:
常規(guī)寫法
以往我們創(chuàng)建一些不可變集合的時候,通常是這樣寫的:
//?不可變的Set
Set?set?=?new?HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set?=?Collections.unmodifiableSet(set);
//?不可變的List
List?list?=?new?ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list?=?Collections.unmodifiableList(list);
Java8的寫法
在Java 8的時候,利用Stream API還能簡化一下,可以演變成這樣:
Set?set?=?Collections.unmodifiableSet(Stream.of("a",?"b",?"c").collect(toSet()));
List?list?=?Collections.unmodifiableList(Stream.of(1,?2,?3).collect(toList()));
Java9的寫法
而現(xiàn)在到了Java 9,這一操作變的更為簡單,只需要這樣:
Set?set?=?Set.of("a",?"b",?"c");
List?list?=?List.of(1,?2,?3);
同時,對于一下更復(fù)雜的集合也一樣支持,比如Map類型也可以這樣寫:
Map?map?=?Map.of("a",?"1",?"b",?"2",?"c",?"3");
就是要注意下,Map.of的參數(shù)是key和value成對出現(xiàn)的,所以參數(shù)數(shù)量一定是偶數(shù):
Map.of()
Map.of(k1,?v1)
Map.of(k1,?v1,?k2,?v2)
Map.of(k1,?v1,?k2,?v2,?k3,?v3)
...
與asList的區(qū)別
看到這里,可能有的人會問了,之前不是對于集合有asXxx這樣的方便方法了么?他們有啥區(qū)別嗎?
這里就以List.of和Arrays.asList為例,給大家列一下它們的異同:
Java 9中推出
List.of創(chuàng)建的是不可變集合,而Arrays.asList是可變集合List.of和Arrays.asList都不允許add和remove元素,但Arrays.asList可以調(diào)用set更改值,而List.of不可以,會報java.lang.UnsupportedOperationException異常List.of中不允許有null值,Arrays.asList中可以有null值
好了,今天的分享就到這里!
推薦閱讀
Spring Boot 2.7.0發(fā)布,2.5.x將停止維護,這節(jié)奏你還更得上嗎? Java 8的Stream操作不好調(diào)試?試試這個方法吧! 速領(lǐng):神作《鳳凰架構(gòu):構(gòu)建可靠的大型分布式系統(tǒng)》
你好,我是程序猿DD,10年開發(fā)老司機、阿里云MVP、騰訊云TVP、出過書創(chuàng)過業(yè)、國企4年互聯(lián)網(wǎng)6年。從普通開發(fā)到架構(gòu)師、再到合伙人。一路過來,給我最深的感受就是一定要不斷學(xué)習(xí)并關(guān)注前沿。只要你能堅持下來,多思考、少抱怨、勤動手,就很容易實現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來得及。如果你看好一個事情,一定是堅持了才能看到希望,而不是看到希望才去堅持。相信我,只要堅持下來,你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關(guān)注我,這里會經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。
