En gros, j'ai une liste de tableaux de lieux:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
ci-dessous, j'appelle la méthode suivante:
.getMap();
les paramètres de la méthode getMap () sont les suivants:
getMap(WorldLocation... locations)
Le problème que je rencontre est que je ne sais pas comment passer de la liste entière de locations
à cette méthode.
J'ai essayé
.getMap(locations.toArray())
mais getMap n'accepte pas cela parce qu'il n'accepte pas les objets [].
Maintenant si j'utilise
.getMap(locations.get(0));
cela fonctionnera parfaitement ... mais je dois passer d'une manière ou d'une autre dans TOUS les emplacements ... Je pourrais bien sûr continuer à ajouter locations.get(1), locations.get(2)
etc. mais la taille du tableau varie. Je ne suis tout simplement pas habitué au concept entier de ArrayList
Quel serait le moyen le plus facile de s'y prendre? Je sens que je ne pense tout simplement pas droit maintenant.
Utilisez la méthode toArray(T[] arr)
.
.getMap(locations.toArray(new WorldLocation[locations.size()]))
(toArray(new WorldLocation[0])
fonctionne également, mais vous alloueriez un tableau de longueur nulle sans raison.)
Voici un exemple complet:
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()]));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
Cet article a été réécrit sous forme d'article ici .
En Java 8:
List<WorldLocation> locations = new ArrayList<>();
.getMap(locations.stream().toArray(WorldLocation[]::new));
Une version abrégée de la réponse acceptée utilisant Guava:
.getMap(Iterables.toArray(locations, WorldLocation.class));
peut être raccourci en important statiquement dans toArray:
import static com.google.common.collect.toArray;
// ...
.getMap(toArray(locations, WorldLocation.class));
Vous pouvez faire: getMap(locations.toArray(new WorldLocation[locations.size()]));
ou getMap(locations.toArray(new WorldLocation[0]));
ou getMap(new
WorldLocation[locations.size()]);
@SuppressWarnings ("décoché") est nécessaire pour supprimer l'avertissement ide.