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);
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);
}
お役に立てれば!
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);
ユーザーが関数を必要とするような、データの追加の操作が必要な場合は、この方法は完全ではありません(要素のクラスを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()));
}
}
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[]
から要素を取得できます。
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
array[i++] = s;
}
アプリケーションがすでに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です。
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)
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]);
まず、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);
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);