java - 사용법 - 자바에서 ArrayList<String>을 'String[]'로 변환 중




자바 리스트 (12)

어떻게하면 ArrayList<String> 객체를 Java의 String[] 배열로 변환 할 수 있습니까?


ArrayList의 toArray() 메서드를 사용하면 0bject[] 얻을 수 있습니다. 그 Object[]String[] 캐스트 여기 샘플 코드 :

ArrayList<String> arr_List=new ArrayList<String>();
Object[] str_Arr=arr_List.toArray();

JDK / 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

Java 8에서는 다음을 사용하여 수행 할 수 있습니다.

String[] arrayFromList = fromlist.stream().toArray(String[]::new);

모든 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() 메서드를 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);

애플리케이션이 이미 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.


이 방법을 사용하여 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]);
    }

자바 8 :

String[] strings = list.parallelStream().toArray(String[]::new);

자바 8의 대안 :

String[] strings = list.stream().toArray(String[]::new);

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[] 요소를 검색 할 수 있습니다.


ArrayList<String> arrayList = new ArrayList<String>();
Object[] objectList = arrayList.toArray();
String[] stringArray =  Arrays.copyOf(objectList,objectList.length,String[].class);

copyOf를 사용하면 배열에 대한 ArrayList도 수행 될 수 있습니다.


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()] . 그러나이 blogpost 는 JVM 최적화로 인해 new String[0] 것이 더 좋습니다.


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;
}






collections