a' String [] 'en Java'/> a' String [] 'en Java'/> a' String [] 'en Java'/> Conversión de 'ArrayList <String> a' String [] 'en Java | programandonet.com

Pregunta Conversión de 'ArrayList a' String [] 'en Java


¿Cómo podría convertir un ArrayList<String> objetar a un String[] matriz en Java?


785
2017-10-28 11:30


origen


Respuestas:


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

Por ejemplo:

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

los toArray() método sin pasar ningún argumento devuelve Object[]. Por lo tanto, debe pasar una matriz como argumento, que se rellenará con los datos de la lista y se devolverá. También puede pasar una matriz vacía, pero también puede pasar una matriz con el tamaño deseado.

Actualización importante: Originalmente el código anterior utilizado new String[list.size()]. Sin embargo, este blogpost revela que debido a las optimizaciones de JVM, el uso new String[0] es mejor ahora


1504
2017-10-28 11:34



Una alternativa 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);

Usando copyOf, también se puede hacer ArrayList en arreglos.


23
2018-05-01 08:00



Puedes usar el toArray() método para List:

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

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

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

O puede agregar manualmente los elementos a una matriz:

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

¡Espero que esto ayude!


22
2018-01-27 17:41



En Java 8:

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

10
2018-02-05 15:54



en caso de que se desee una manipulación extra de los datos, para lo cual el usuario desea una función, este enfoque no es perfecto (ya que requiere pasar la clase del elemento como segundo parámetro), pero funciona:

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



Genéricos solución para encubrir cualquier List<Type> a 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;
}

Nota Debes override toString() método.

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



Con JDK / 11, uno puede usar alternativamente una API recién introducida Collection.toArray(IntFunction<T[]> generator)


2
2017-07-26 18:38