답변:
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]
이 더 나은 것으로 나타났습니다 .
Class
객체 가 있어야합니다 . 일반 객체에서 파생하는 것이 완전히 불가능한 것 같습니다. 내가 말했듯이 그 이유는 전체 구조가 가짜이기 때문입니다. 모두 내부적으로 Object로 저장됩니다.
Java 8의 대안 :
String[] strings = list.stream().toArray(String[]::new);
자바 11+ :
String[] strings = list.toArray(String[]::new);
toArray
는 Stream
객체 에서만 사용할 수 있습니다 . a를 사용하여 스트림을 줄이고 Collectors
적용하려고 하면이 컴파일 오류가 발생할 수 있습니다 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-11부터는 API Collection.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
제네릭 솔루션은 어떤 은밀한 할 List<Type>
수 있습니다 String []
:
public static <T> String[] listToArray(List<T> list) {
String [] array = new String[list.size()];
for (int i = 0; i < array.length; i++)
array[i] = list.get(i).toString();
return array;
}
참고 당신이해야 override toString()
하는 방법.
class Car {
private String name;
public Car(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
final List<Car> carList = new ArrayList<Car>();
carList.add(new Car("BMW"))
carList.add(new Car("Mercedes"))
carList.add(new Car("Skoda"))
final String[] carArray = listToArray(carList);
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
array[i++] = s;
}
사용자가 함수를 원하는 데이터를 추가로 조작 해야하는 경우이 방법은 완벽하지는 않지만 (요소의 클래스를 두 번째 매개 변수로 전달해야하므로) 작동합니다.
import java.util.ArrayList; import java.lang.reflect.Array;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
al.add(1);
al.add(2);
Integer[] arr = convert(al, Integer.class);
for (int i=0; i<arr.length; i++)
System.out.println(arr[i]);
}
public static <T> T[] convert(ArrayList<T> al, Class clazz) {
return (T[]) al.toArray((T[])Array.newInstance(clazz, al.size()));
}
}
애플리케이션이 이미 Apache Commons lib를 사용중인 경우 허용되는 답변을 약간 수정하여 매번 비어있는 새 배열을 만들 수 없습니다.
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());
그러나 실제로는 맛의 문제 인 IMO와 같은 이점이 없습니다.
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()
당신도 증가하지 않는 명시 적 캐스트가 필요하지 않을 것입니다 경우 3. i
및 4.이 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(); }
Java 11에서는 Collection.toArray(generator)
메소드를 사용할 수 있습니다 . 다음 코드는 새로운 문자열 배열을 만듭니다.
List<String> list = List.of("one", "two", "three");
String[] array = list.toArray(String[]::new)
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String [] strArry= list.stream().toArray(size -> new String[size]);
의견에 따라 전환이 어떻게 작동하는지 설명하는 단락을 추가했습니다. 먼저 List가 문자열 스트림으로 변환됩니다. 그런 다음 Stream.toArray를 사용하여 스트림의 요소를 Array로 변환합니다. 위의 마지막 명령문에서 "size-> new String [size]"는 실제로 String 스트림의 크기로 String 배열을 할당하는 IntFunction 함수입니다. 그 진술은
IntFunction<String []> allocateFunc = size -> {
return new String[size];
};
String [] strArry= list.stream().toArray(allocateFunc);
이 방법을 사용하여 List를 String 배열로 변환 할 수 있습니다.
Object[] stringlist=list.toArray();
완전한 예 :
ArrayList<String> list=new ArrayList<>();
list.add("Abc");
list.add("xyz");
Object[] stringlist=list.toArray();
for(int i = 0; i < stringlist.length ; i++)
{
Log.wtf("list data:",(String)stringlist[i]);
}
toArray(T[])
하고하는 구문과 유사Stream.toArray
.