我该如何在Java中将一个ArrayList<String>
对象转换为String[]
数组?
我该如何在Java中将一个ArrayList<String>
对象转换为String[]
数组?
List<String> list = ..;
String[] array = list.toArray(new String[0]);
例如:List<String> list = new ArrayList<String>();
//add some stuff
list.add("android");
list.add("apple");
String[] stringArray = list.toArray(new String[0]);
toArray()
方法不带参数返回Object[]
数组。因此,您需要将一个数组作为参数传递进去,该数组将填充来自列表中的数据并被返回。您可以传递一个空数组,也可以传递一个具有所需大小的数组。
重要更新:最初的代码使用了new String[list.size()]
。然而,这篇博客文章揭示了由于JVM的优化,现在使用new String[0]
更好。Java 8中的一种替代方案:
String[] strings = list.stream().toArray(String[]::new);
Java 11+:
String[] strings = list.toArray(String[]::new);
Stream
对象上使用 toArray
方法。如果你使用 Collectors
对流进行 reduce 操作并试图应用 toArray
,可能会导致编译错误。我建议你检查代码并确保只对 Stream
对象调用 toArray
方法。 - Udara BentotaString[]::new
相当于 i -> new String[i]
。请参见 https://dev59.com/4F0b5IYBdhLWcg3wOvCd - Unmitigated从Java-11开始,可以使用APICollection.toArray(IntFunction<T[]> generator)
来实现与以下代码相同的功能:
List<String> list = List.of("x","y","z");
String[] arrayBeforeJDK11 = list.toArray(new String[0]);
String[] arrayAfterJDK11 = list.toArray(String[]::new); // similar to Stream.toArray
toArray()
方法来处理 List
:ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
String[] array = list.toArray(new String[list.size()]);
或者您可以手动将元素添加到数组中:
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
String[] array = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i);
}
希望这能有所帮助!
ArrayList<String> arrayList = new ArrayList<String>();
Object[] objectList = arrayList.toArray();
String[] stringArray = Arrays.copyOf(objectList,objectList.length,String[].class);
使用copyOf,也可以将ArrayList转换为数组。
在Java 8中:
String[] strings = list.parallelStream().toArray(String[]::new);
parallelStream()
而不是简单地使用 stream()
? - Yoory N.在Java 8中,可以使用以下方式实现:
String[] arrayFromList = fromlist.stream().toArray(String[]::new);
List<String> list = ..;
String[] array = list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
// or if using static import
String[] array = list.toArray(EMPTY_STRING_ARRAY);
ArrayUtils
中还有几个预分配的不同类型的空数组。
此外,我们可以通过以下方式欺骗JVM为我们创建一个空数组:
String[] array = list.toArray(ArrayUtils.toArray());
// or if using static import
String[] array = list.toArray(toArray());
但实际上这样做没有任何优势,只是个人口味而已。以我的看法来看,这并不重要。
Iterator<String>
来迭代ArrayList<String>
的元素:ArrayList<String> list = new ArrayList<>();
String[] array = new String[list.size()];
int i = 0;
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); i++) {
array[i] = iterator.next();
}
String[]
中检索元素。.toString()
,而不需要显式转换,2.你甚至没有增加i
,3.while
最好被for
替换。建议的代码:ArrayList<String> stringList = ... ; String[] stringArray = new String[stringList.size()]; int i = 0; for(Iterator<String> it = stringList.iterator(); it.hasNext(); i++) { stringArray[i] = it.next(); }
- Olivier Grégoire List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String [] strArry= list.stream().toArray(size -> new String[size]);
根据评论,我已经添加了一段说明如何进行转换。首先,List被转换为String流。然后使用Stream.toArray将流中的元素转换为数组。在上面的最后一个语句中,“size -> new String [size]”实际上是一个IntFunction函数,它分配具有String流大小的String数组。该语句与以下语句相同。
IntFunction<String []> allocateFunc = size -> {
return new String[size];
};
String [] strArry= list.stream().toArray(allocateFunc);
Stream.toArray
语法相似且同样高效的toArray(T[])
API 进行了优化。 - Naman