web-dev-qa-db-ja.com

Javaでの 'ArrayList <String>から' String [] 'への変換

JavaでArrayList<String>オブジェクトをString[]配列に変換する方法を教えてください。

912
Alex
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]を使用する方が良いことを示しています。

1662
Bozho

Java 8の代替手段

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

ListにはtoArray()メソッドを使用できます。

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

お役に立てれば!

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

CopyOfを使用して、配列へのArrayListも実行できます。

27
Rajesh Vemula

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
14
Naman

Java 8の場合:

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

一般 /任意の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);
4
Khaled Lela

ユーザーが関数を必要とするような、データの追加の操作が必要な場合は、この方法は完全ではありません(要素のクラスを2番目のパラメーターとして渡す必要があるため)。

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()));
  }
}
3
Roberto Attias

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[]から要素を取得できます。

3
Vatsal Chavda
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
  array[i++] = s;
}
3
HZhang

アプリケーションがすでに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です。

3
Yoory N.

Java 8では、それを使用して行うことができます

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

このメソッドを使用して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]);
    }
2

Java 11では、Collection.toArray(generator)メソッドを使うことができます。次のコードは新しい文字列の配列を作成します。

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

Java.baseのJava.util.Collection.toArray() から。

2
Rafal Borowiec
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;
}
1
Denis Fedak
    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を使用してStringストリームの要素を含む配列を返します。 "size - > new String [size]"は、String配列をStringストリームのサイズで割り当てるIntFunction関数です。それは次のように並べ替えることができます

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

ArrayListを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);
0
CoderSam