java11引入了一种将带有泛型的集合转换为带有泛型的数组的简单方法。
java11之前
使用toarray方法
对于list,你可以直接使用toarray方法,但需要注意,toarray方法默认返回一个object[]数组,你可能需要将其强制转换为正确的类型。
list<string> list = arrays.aslist("a", "b", "c"); object[] strobjectarray = list.toarray();
这样转出来的数组是object类型,在使用的时候还需要进行强制类型转换。
在java 11及之前,推荐使用这种方式来避免不必要的数组复制:
string[] array = list.toarray(new string[0]);
在java 11之前,你可能会看到这样的代码:
string[] array = list.toarray(new string[list.size()]);
这种方式在java 11之前也是有效的,但可能导致不必要的数组复制
但从java 9开始,推荐使用new type[0]
作为toarray方法的参数,因为它可以避免在集合大小已知时的不必要数组创建和复制。
使用流(streams)api
虽然这不是最直接的方法,但你可以使用流来转换集合为数组。这通常在需要更复杂的转换时更有用。
list<string> list = arrays.aslist("a", "b", "c"); string[] array = list.stream().toarray(string[]::new);
在这个例子中,我们使用stream().toarray()方法,并传递一个构造函数引用(string[]::new)来指定数组的类型。这将返回一个正确类型的数组。
java11
java 11中,toarray
方法可以传入intfunction
参数。这种方式允许你更灵活地创建数组。
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
,简洁且高效。
到此这篇关于java11新特性之集合转换为数组的文章就介绍到这了,更多相关java11集合转换为数组内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论