programing tip

'ArrayList 변환

itbloger 2020. 9. 28. 08:24
반응형

'ArrayList 변환 Java에서 '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);

다음과 같은 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를 배열로도 수행 할 수 있습니다.


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[] strings = list.parallelStream().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() 방법을 사용해야합니다 .

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[]루프 사용하여 요소를 검색 할 수 있습니다 .


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

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

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

Java 11에서는 Collection.toArray(generator)메서드를 사용할 수 있습니다 . 다음 코드는 새로운 문자열 배열을 만듭니다.

List<String> list = List.of("one", "two", "three");
String[] array = list.toArray(String[]::new)

from java.base's java.util.Collection.toArray().


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

    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    String [] strArry= list.stream().toArray(size -> new String[size]);

First, List is converted to a String stream. Then it uses Stream.toArray to return an array containing the elements of the String stream. "size -> new String[size]" is an IntFunction function that allocates a String array with size of the String stream. It can be rearranged as

IntFunction<String []> allocateFunc = size -> { 
return new String[size];
};   
String [] strArry= list.stream().toArray(allocateFunc);

Converting an ArrayList into String[]:

//Creating an ArrayList of String object and populating it
ArrayList<String> list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");

//Creating a String array with the same size as that of the ArrayList
String[] stringArray = new String[list.size()];

//Now converting the ArrayList to a String array
stringArray = list.toArray(stringArray);

참고URL : https://stackoverflow.com/questions/4042434/converting-arrayliststring-to-string-in-java

반응형