java11新特性之集合轉(zhuǎn)換為數(shù)組的方法
Java11引入了一種將帶有泛型的集合轉(zhuǎn)換為帶有泛型的數(shù)組的簡(jiǎn)單方法。
Java11之前
使用toArray方法
對(duì)于List,你可以直接使用toArray方法,但需要注意,toArray方法默認(rèn)返回一個(gè)Object[]數(shù)組,你可能需要將其強(qiáng)制轉(zhuǎn)換為正確的類(lèi)型。
List<String> list = Arrays.asList("a", "b", "c"); Object[] strObjectArray = list.toArray();
這樣轉(zhuǎn)出來(lái)的數(shù)組是Object類(lèi)型,在使用的時(shí)候還需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換。
在Java 11及之前,推薦使用這種方式來(lái)避免不必要的數(shù)組復(fù)制:
String[] array = list.toArray(new String[0]);
在Java 11之前,你可能會(huì)看到這樣的代碼:
String[] array = list.toArray(new String[list.size()]);
這種方式在Java 11之前也是有效的,但可能導(dǎo)致不必要的數(shù)組復(fù)制
但從Java 9開(kāi)始,推薦使用new Type[0]
作為toArray方法的參數(shù),因?yàn)樗梢员苊庠诩洗笮∫阎獣r(shí)的不必要數(shù)組創(chuàng)建和復(fù)制。
使用流(Streams)API
雖然這不是最直接的方法,但你可以使用流來(lái)轉(zhuǎn)換集合為數(shù)組。這通常在需要更復(fù)雜的轉(zhuǎn)換時(shí)更有用。
List<String> list = Arrays.asList("a", "b", "c"); String[] array = list.stream().toArray(String[]::new);
在這個(gè)例子中,我們使用stream().toArray()方法,并傳遞一個(gè)構(gòu)造函數(shù)引用(String[]::new)來(lái)指定數(shù)組的類(lèi)型。這將返回一個(gè)正確類(lèi)型的數(shù)組。
Java11
Java 11中,toArray
方法可以傳入IntFunction
參數(shù)。這種方式允許你更靈活地創(chuàng)建數(shù)組。
toArray
方法的原型如下:
java.util.Collection#toArray(java.util.function.IntFunction<T[]>)
default <T> T[] toArray(IntFunction<T[]> generator) { return toArray(generator.apply(0)); }
toArray
方法的使用如下:
List<String> list = Arrays.asList("a", "b", "c"); String[] array = list.toArray(String[]::new);
這種方式使用方法引用String[]::new
,簡(jiǎn)潔且高效。
到此這篇關(guān)于java11新特性之集合轉(zhuǎn)換為數(shù)組的文章就介紹到這了,更多相關(guān)java11集合轉(zhuǎn)換為數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果深入分析
這篇文章主要介紹了SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12Mybatis?MappedStatement類(lèi)核心原理詳解
這篇文章主要介紹了Mybatis?MappedStatement類(lèi),mybatis的mapper文件最終會(huì)被解析器,解析成MappedStatement,其中insert|update|delete|select每一個(gè)標(biāo)簽分別對(duì)應(yīng)一個(gè)MappedStatement2022-11-11Springboot前后端分離項(xiàng)目配置跨域?qū)崿F(xiàn)過(guò)程解析
這篇文章主要介紹了Springboot前后端分離項(xiàng)目配置跨域?qū)崿F(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Java中Elasticsearch的4種分頁(yè)方式詳解
在?Elasticsearch?中,有?4種常見(jiàn)的分頁(yè)方法,本文將帶大家分析一下每種方法的優(yōu)缺點(diǎn)以及我們?cè)撊绾芜x擇,感興趣的小伙伴可以參考一下2025-01-01springboot如何讀取配置文件(application.yml)中的屬性值
本篇文章主要介紹了springboot如何讀取配置文件(application.yml)中的屬性值,具有一定的參考價(jià)值,有興趣的小伙伴可以了解一下2017-04-04mybatis開(kāi)啟spring事務(wù)代碼解析
這篇文章主要介紹了mybatis開(kāi)啟spring事務(wù)代碼解析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的完整步驟
JSAPI支付是用戶在微信中打開(kāi)商戶的H5頁(yè)面,商戶在H5頁(yè)面通過(guò)調(diào)用微信支付提供的JSAPI接口調(diào)起微信支付模塊完成支付,下面這篇文章主要給大家介紹了關(guān)于spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的相關(guān)資料,需要的朋友可以參考下2022-05-05