Jawaban:
List<String> list = ..;
String[] array = list.toArray(new String[0]);
Sebagai contoh:
List<String> list = new ArrayList<String>();
//add some stuff
list.add("android");
list.add("apple");
String[] stringArray = list.toArray(new String[0]);
The toArray()
Metode tanpa melewati setiap argumen kembali Object[]
. Jadi, Anda harus melewatkan array sebagai argumen, yang akan diisi dengan data dari daftar, dan dikembalikan. Anda dapat melewatkan array kosong juga, tetapi Anda juga dapat melewatkan array dengan ukuran yang diinginkan.
Pembaruan penting : Awalnya kode di atas digunakan new String[list.size()]
. Namun, blogpost ini mengungkapkan bahwa karena optimasi JVM, menggunakan new String[0]
lebih baik sekarang.
Class
objek yang sebenarnya , yang tampaknya sama sekali tidak mungkin untuk diturunkan dari tipe generik. Alasan untuk ini, seperti yang saya katakan, adalah bahwa seluruh konstruksi palsu; itu semua hanya disimpan sebagai Object secara internal.
Alternatif di Java 8:
String[] strings = list.stream().toArray(String[]::new);
Java 11+:
String[] strings = list.toArray(String[]::new);
toArray
pada Stream
objek. Kesalahan kompilasi ini dapat terjadi jika Anda mengurangi aliran menggunakan Collectors
dan kemudian mencoba menerapkan toArray
.
Anda dapat menggunakan toArray()
metode ini untuk List
:
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
String[] array = list.toArray(new String[list.size()]);
Atau Anda dapat secara manual menambahkan elemen ke array:
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);
}
Semoga ini membantu!
ArrayList<String> arrayList = new ArrayList<String>();
Object[] objectList = arrayList.toArray();
String[] stringArray = Arrays.copyOf(objectList,objectList.length,String[].class);
Menggunakan copyOf, ArrayList ke array mungkin juga dilakukan.
Mulai dari Java-11, seseorang dapat menggunakan API sebagai alternatif Collection.toArray(IntFunction<T[]> generator)
untuk mencapai hal yang sama seperti:
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
Di Jawa 8:
String[] strings = list.parallelStream().toArray(String[]::new);
parallelStream()
bukannya sederhana stream()
?
Generik solusi untuk rahasia setiap List<Type>
ke 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;
}
Catatan Anda harus override toString()
metode.
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;
}
dalam hal beberapa manipulasi ekstra dari data yang diinginkan, di mana pengguna menginginkan suatu fungsi, pendekatan ini tidak sempurna (karena membutuhkan melewati kelas elemen sebagai parameter kedua), tetapi berfungsi:
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()));
}
}
Jika aplikasi Anda sudah menggunakan lib Apache Commons, Anda dapat sedikit memodifikasi jawaban yang diterima untuk tidak membuat array kosong baru setiap kali:
List<String> list = ..;
String[] array = list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
// or if using static import
String[] array = list.toArray(EMPTY_STRING_ARRAY);
Ada beberapa array kosong yang telah dialokasikan sebelumnya dari berbagai jenis di ArrayUtils
.
Kita juga bisa menipu JVM untuk membuat array kosong untuk kita dengan cara ini:
String[] array = list.toArray(ArrayUtils.toArray());
// or if using static import
String[] array = list.toArray(toArray());
Tapi benar-benar tidak ada keuntungan dengan cara ini, hanya masalah selera, IMO.
Anda dapat menggunakan Iterator<String>
untuk mengulangi elemen-elemen dari 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();
}
Sekarang Anda dapat mengambil kembali elemen dari String[]
menggunakan Loop apa pun.
.toString()
mana tidak ada pemeran eksplisit yang diperlukan, 3. Anda bahkan tidak menambah i
, dan 4. while
akan lebih baik digantikan oleh a for
. Kode yang disarankan:ArrayList<String> stringList = ... ; String[] stringArray = new String[stringList.size()]; int i = 0; for(Iterator<String> it = stringList.iterator(); it.hasNext(); i++) { stringArray[i] = it.next(); }
Di Java 11, kita bisa menggunakan Collection.toArray(generator)
metode ini. Kode berikut akan membuat array string baru:
List<String> list = List.of("one", "two", "three");
String[] array = list.toArray(String[]::new)
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String [] strArry= list.stream().toArray(size -> new String[size]);
Per komentar, saya telah menambahkan paragraf untuk menjelaskan cara kerja konversi. Pertama, Daftar dikonversi ke aliran String. Kemudian ia menggunakan Stream.toArray untuk mengonversi elemen dalam aliran ke Array. Dalam pernyataan terakhir di atas "size -> new String [size]" sebenarnya adalah fungsi IntFunction yang mengalokasikan array String dengan ukuran stream String. Pernyataan itu identik dengan
IntFunction<String []> allocateFunc = size -> {
return new String[size];
};
String [] strArry= list.stream().toArray(allocateFunc);
Anda dapat mengonversi array Daftar ke String dengan menggunakan metode ini:
Object[] stringlist=list.toArray();
Contoh lengkap:
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;
}
toArray(T[])
dan serupa dalam sintaksisnyaStream.toArray
.