Conversion de 'ArrayList en' String [] ' en Java

comment convertir un objet ArrayList<String> en un tableau String[] en Java?

819
demandé sur nullpointer 2010-10-28 15:30:53

17 réponses

List<String> list = ..;
String[] array = list.toArray(new String[0]);

par exemple:

List<String> list = new ArrayList<String>();
//add some stuff
list.add("android");
list.add("apple");
String[] stringArray = list.toArray(new String[0]);

la méthode toArray() sans passer aucun argument retourne Object[] . Donc vous devez passer un tableau comme argument, qui sera rempli avec les données de la liste, et retourné. Vous pouvez passer un tableau vide, mais vous pouvez également passer un tableau avec la taille souhaitée.

mise à jour importante : à l'origine le code ci-dessus utilisé new String[list.size()] . Cependant, ce blogpost révèle que grâce aux optimisations JVM, l'utilisation de new String[0] est mieux maintenant.

1542
répondu Bozho 2016-03-11 17:28:30

une alternative en Java 8:

String[] strings = list.stream().toArray(String[]::new);
133
répondu Vitalii Fedorenko 2015-05-18 12:14:37

vous pouvez utiliser la méthode toArray() pour List :

ArrayList<String> list = new ArrayList<String>();

list.add("apple");
list.add("banana");

String[] array = list.toArray(new String[list.size()]);

ou vous pouvez ajouter manuellement les éléments à un tableau:

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

Espérons que cette aide!

25
répondu codecubed 2016-01-27 17:41:08
ArrayList<String> arrayList = new ArrayList<String>();
Object[] objectList = arrayList.toArray();
String[] stringArray =  Arrays.copyOf(objectList,objectList.length,String[].class);

utilisant copyOf, ArrayList to arrays pourrait être fait aussi.

24
répondu Rajesh Vemula 2016-01-22 05:15:09

En Java 8:

String[] strings = list.parallelStream().toArray(String[]::new);
10
répondu Mike Shauneu 2016-02-05 15:54:26

avec JDK / 11, on peut alternativement utiliser une API nouvellement introduite Collection.toArray(IntFunction<T[]> generator) to achieve the same as:

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
5
répondu nullpointer 2018-07-26 18:38:00

dans le cas où une manipulation supplémentaire des données est souhaitée, pour laquelle l'utilisateur veut une fonction, cette approche n'est pas parfaite (car elle nécessite de passer la classe de l'élément comme second paramètre), mais fonctionne:

importer java.util.ArrayList; importer java.lang.refléter.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
répondu Roberto Attias 2017-01-04 22:37:00

Génériques la solution pour convertir tous 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;
}

Note Vous devez override toString() la méthode.

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);
3
répondu Khaled Lela 2018-04-04 13:23:52
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
  array[i++] = s;
}
2
répondu HZhang 2010-10-28 12:58:15

si votre application utilise déjà Apache Commons lib, vous pouvez modifier légèrement la réponse acceptée pour ne pas créer un nouveau tableau vide à chaque fois:

List<String> list = ..;
String[] array = list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);

// or if using static import
String[] array = list.toArray(EMPTY_STRING_ARRAY);

il y a quelques autres matrices vides préallouées de différents types dans ArrayUtils .

aussi nous pouvons tromper JVM pour créer en empty array pour nous de cette façon:

String[] array = list.toArray(ArrayUtils.toArray());

// or if using static import
String[] array = list.toArray(toArray());

mais il n'y a vraiment aucun avantage de cette façon, juste une question de goût, IMO.

1
répondu Yoory N. 2018-02-14 13:16:47

vous pouvez utiliser Iterator<String> pour itérer les éléments du 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();
}

Maintenant vous pouvez récupérer des éléments de String[] en utilisant n'importe quelle boucle.

1
répondu Vatsal Chavda 2018-04-04 13:22:52

vous pouvez convertir la liste en tableau de chaînes de caractères en utilisant cette méthode:

 Object[] stringlist=list.toArray();

l'exemple complet:

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]);
    }
1
répondu Panchal Nilkanth 2018-06-26 18:21:57
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;
}
0
répondu Denis Fedak 2017-12-27 09:28:01

en Java 8, Il peut être fait en utilisant

String[] arrayFromList = fromlist.stream().toArray(String[]::new);
0
répondu KayV 2018-09-19 12:53:06

en Java 11, nous pouvons utiliser la méthode Collection.toArray(generator) . Le code suivant créera un nouveau tableau de chaîne de caractères:

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

voir: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html#toArray(java.util.function.IntFunction)

0
répondu Rafal Borowiec 2018-10-01 23:45:11

en utilisant toArray() méthode D'ArrayList vous pouvez obtenir 0bject[] . Object[] à String[] Voici le code de l'échantillon:

ArrayList<String> arr_List=new ArrayList<String>();
Object[] str_Arr=arr_List.toArray();
-3
répondu user3354457 2015-03-31 06:11:18

C'est assez:

int[] d = new int[list.size()];

for (int i = 0; i < list.size(); i++) {
    d[i] = list.get(i);
}
-7
répondu user2753336 2013-09-06 07:28:13