en' String [] 'en Java'/> en' String [] 'en Java'/> en' String [] 'en Java'/> Conversion de 'ArrayList <String> en' String [] 'en Java | abulletproofidea.com

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


Comment puis-je convertir un ArrayList<String> s'opposer à un String[] tableau en Java?


785
2017-10-28 11:30


origine


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

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

Mise à jour importante: A l'origine le code ci-dessus utilisé new String[list.size()]. cependant, ce blog révèle qu'en raison des optimisations JVM, l'utilisation new String[0] c'est mieux maintenant.


1504
2017-10-28 11:34



Une alternative en Java 8:

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

129
2018-05-18 12:14



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

En utilisant copyOf, ArrayList pour les tableaux peut être fait aussi.


23
2018-05-01 08:00



Vous pouvez utiliser le toArray() méthode 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);
}

J'espère que cela t'aides!


22
2018-01-27 17:41



En Java 8:

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

10
2018-02-05 15:54



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 en second paramètre), mais fonctionne:

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
2018-01-04 22:37



Génériques solution pour couvrir toute 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;
}

Remarque Vous devez override toString() 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
2018-05-18 13:29



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

2
2017-10-28 12:58



Avec JDK / 11, on peut alternativement utiliser une API nouvellement introduite Collection.toArray(IntFunction<T[]> generator)


2
2017-07-26 18:38



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 tableaux vides préalloués de différents types dans ArrayUtils.

Aussi, nous pouvons tromper JVM pour créer un tableau vide 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
2018-02-14 13:16