arreglo - Convertir la lista a la matriz en Java
list to[] java (12)
Creo que esta es la forma más sencilla:
Foo[] array = list.toArray(new Foo[0]);
¿Cómo puedo convertir una List
a una Array
en Java?
Compruebe el código a continuación:
ArrayList<Tienda> tiendas;
List<Tienda> tiendasList;
tiendas = new ArrayList<Tienda>();
Resources res = this.getBaseContext().getResources();
XMLParser saxparser = new XMLParser(marca,res);
tiendasList = saxparser.parse(marca,res);
tiendas = tiendasList.toArray();
this.adaptador = new adaptadorMarca(this, R.layout.filamarca, tiendas);
setListAdapter(this.adaptador);
Necesito rellenar la matriz de tiendas
con los valores de tiendasList
.
Ejemplo tomado de esta página: http://www.java-examples.com/copy-all-elements-java-arraylist-object-array-example
import java.util.ArrayList;
public class CopyElementsOfArrayListToArrayExample {
public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();
//Add elements to ArrayList
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
arrayList.add("4");
arrayList.add("5");
/*
To copy all elements of java ArrayList object into array use
Object[] toArray() method.
*/
Object[] objArray = arrayList.toArray();
//display contents of Object array
System.out.println("ArrayList elements are copied into an Array.
Now Array Contains..");
for(int index=0; index < objArray.length ; index++)
System.out.println(objArray[index]);
}
}
/*
Output would be
ArrayList elements are copied into an Array. Now Array Contains..
1
2
3
4
5
Esto (la respuesta de Ondrej):
Foo[] array = list.toArray(new Foo[0]);
Es el idioma más común que veo. Aquellos que sugieren que usas el tamaño real de la lista en lugar de "0" están entendiendo mal lo que está sucediendo aquí. A la llamada toArray no le importa el tamaño o el contenido de la matriz dada, solo necesita su tipo. Hubiera sido mejor si tomara un Tipo real en cuyo caso "Foo.class" hubiera sido mucho más claro. Sí, este idioma genera un objeto ficticio, pero incluir el tamaño de la lista solo significa que se genera un objeto ficticio más grande. Una vez más, el objeto no se utiliza de ninguna manera; Es solo el tipo que se necesita.
Esto es trabajo. Mas o menos.
public static Object[] toArray(List<?> a) {
Object[] arr = new Object[a.size()];
for (int i = 0; i < a.size(); i++)
arr[i] = a.get(i);
return arr;
}
Luego el método principal.
public static void main(String[] args) {
List<String> list = new ArrayList<String>() {{
add("hello");
add("world");
}};
Object[] arr = toArray(list);
System.out.println(arr[0]);
}
Lo mejor que se me ocurrió sin Java 8 fue:
public static <T> T[] toArray(List<T> list, Class<T> objectClass) {
if (list == null) {
return null;
}
T[] listAsArray = (T[]) Array.newInstance(objectClass, list.size());
list.toArray(listAsArray);
return listAsArray;
}
Si alguien tiene una mejor manera de hacerlo, por favor comparta :)
Me encontré con este fragmento de código que lo resuelve.
//Creating a sample ArrayList
List<Long> list = new ArrayList<Long>();
//Adding some long type values
list.add(100l);
list.add(200l);
list.add(300l);
//Converting the ArrayList to a Long
Long[] array = (Long[]) list.toArray(new Long[list.size()]);
//Printing the results
System.out.println(array[0] + " " + array[1] + " " + array[2]);
La conversión funciona de la siguiente manera:
- Crea una nueva matriz larga, con el tamaño de la lista original
- Convierte el ArrayList original en una matriz utilizando el recién creado
- Convierte esa matriz en una matriz larga (Larga []), que apropiadamente llamé ''matriz''
Para ArrayList los siguientes trabajos:
ArrayList<Foo> list = new ArrayList<Foo>();
//... add values
Foo[] resultArray = new Foo[list.size()];
resultArray = list.toArray(resultArray);
Prueba esto:
List list = new ArrayList();
list.add("Apple");
list.add("Banana");
Object[] ol = list.toArray();
Puedes usar toArray () api de la siguiente manera,
ArrayList<String> stringList = new ArrayList<String>();
stringList.add("ListItem1");
stringList.add("ListItem2");
String[] stringArray = new String[stringList.size()];
stringArray = stringList.toArray(stringList);
Los valores de la matriz son,
for(String value : stringList)
{
System.out.println(value);
}
Una alternativa en Java 8:
String[] strings = list.stream().toArray(String[]::new);
Ya sea:
Foo[] array = list.toArray(new Foo[list.size()]);
o:
Foo[] array = new Foo[list.size()];
list.toArray(array); // fill the array
Tenga en cuenta que esto funciona solo para matrices de tipos de referencia. Para matrices de tipos primitivos, utilice la forma tradicional:
List<Integer> list = ...;
int[] array = new int[list.size()];
for(int i = 0; i < list.size(); i++) array[i] = list.get(i);
tiendas = new ArrayList<Tienda>(tiendasList);
Todas las implementaciones de colección tienen un constructor sobrecargado que toma otra colección (con la plantilla <T>
coincidente). La nueva instancia se crea una instancia con la colección pasada.