java 8 varargs
¿Cómo pasar un ArrayList a un parámetro de método varargs? (3)
En Java 8:
List<WorldLocation> locations = new ArrayList<>();
.getMap(locations.stream().toArray(WorldLocation[]::new));
Básicamente tengo una ArrayList de ubicaciones:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
debajo de esto llamo al siguiente método:
.getMap();
los parámetros en el método getMap () son:
getMap(WorldLocation... locations)
El problema que estoy teniendo es que no estoy seguro de cómo pasar la lista ENTERA de locations
en ese método.
He intentado
.getMap(locations.toArray())
pero getMap no lo acepta porque no acepta Objects [].
Ahora si uso
.getMap(locations.get(0));
funcionará perfectamente ... pero necesito pasar de todas maneras en TODAS las ubicaciones ... Por supuesto, podría seguir agregando locations.get(1), locations.get(2)
etc. pero el tamaño de la matriz varía . Simplemente no estoy acostumbrado al concepto completo de una ArrayList
¿Cuál sería la forma más fácil de hacerlo? Siento que simplemente no estoy pensando en este momento.
Una versión más corta de la respuesta aceptada usando Guava:
.getMap(Iterables.toArray(locations, WorldLocation.class));
puede acortarse aún más mediante la importación estática a Array:
import static com.google.common.collect.toArray;
// ...
.getMap(toArray(locations, WorldLocation.class));
Use el toArray(T[] arr)
.
.getMap(locations.toArray(new WorldLocation[locations.size()]))
( toArray(new WorldLocation[0])
también funciona, pero asignaría una matriz de longitud cero sin ningún motivo).
Aquí hay un ejemplo completo:
public static void method(String... strs) {
for (String s : strs)
System.out.println(s);
}
...
List<String> strs = new ArrayList<String>();
strs.add("hello");
strs.add("wordld");
method(strs.toArray(new String[strs.size()]));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
Esta publicación ha sido reescrita como un artículo here .