Java 에서 'ArrayList' 를 'String[]' 로 변환
어떻게 변환하면ArrayList<String>
에 반대하다.String[]
어레이를 Java로 표시합니까?
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);
를 사용할 수 있습니다.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);
}
이게 도움이 됐으면 좋겠네요!
Java-11부터는 API를 사용하여 다음과 같은 작업을 수행할 수 있습니다.
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
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);
Java 8에서는 다음을 사용하여 실행할 수 있습니다.
String[] arrayFromList = fromlist.stream().toArray(String[]::new);
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.
를 사용하여 의 요소를 반복할 수 있습니다.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[]
모든 루프를 사용합니다.
범용 솔루션을 통해 모든 데이터 보호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);
Java 11에서는Collection.toArray(generator)
방법.다음 코드는 문자열의 새 배열을 만듭니다.
List<String> list = List.of("one", "two", "three");
String[] array = list.toArray(String[]::new)
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
array[i++] = s;
}
사용자가 함수를 원하는 데이터의 추가 조작이 필요한 경우 이 접근법은 완벽하지 않지만(요소의 클래스를 두 번째 파라미터로 전달해야 하므로) 다음과 같이 작동합니다.
import java.displaces.ArrayList.java.lang.reflect를 Import합니다.어레이
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()));
}
}
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 ]는 실제로 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]);
}
private String[] prepareDeliveryArray(List<DeliveryServiceModel> deliveryServices) {
String[] delivery = new String[deliveryServices.size()];
for (int i = 0; i < deliveryServices.size(); i++) {
delivery[i] = deliveryServices.get(i).getName();
}
return delivery;
}
어레이 리스트를 어레이로 변환하는 방법에는 다음 3가지가 있습니다.
public T[] to Array(T[] a) - 이와 같이 리스트 크기를 가진 배열을 작성한 후 String[] ar = new String[list.size()]로 메서드에 넣습니다.
ar = list.toArray(arr);
Public get() 메서드 - 이 방법으로 목록을 반복하고 요소를 하나씩 배열에 넣습니다.
참조: Java에서 ArrayList를 Array로 변환하는 방법
언급URL : https://stackoverflow.com/questions/4042434/converting-arrayliststring-to-string-in-java
'sourcecode' 카테고리의 다른 글
봄에 여러 @RequestMapping 주석을 사용하는 방법 (0) | 2022.07.28 |
---|---|
Clang은 x * 1.0을 최적화하지만 x + 0.0은 최적화하지 않는 이유는 무엇입니까? (0) | 2022.07.28 |
vue-router 링크가 가끔 잘못된 페이지로 연결되거나 전혀 작동하지 않는 이유는 무엇입니까? (0) | 2022.07.28 |
Vuex, 작업 상태 변경 (0) | 2022.07.28 |
상태가 처음 변경된 후 계산된 값이 반응을 멈춥니다. (0) | 2022.07.28 |