Comment créer rapidement et commodément un tableau à un élément [dupliquer]
cette question a déjà une réponse ici:
y a-t-il une méthode utilitaire quelque part qui puisse faire cela en une ligne? Je ne le trouve nulle part dans Collections
, ou List
.
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
Je ne veux pas réinventer la roue à moins que je prévoie de mettre des jantes de fantaisie dessus.
bien... le type peut être T
, et non String
. mais vous obtenez le point. (avec toutes les vérifications nulles, les contrôles de sécurité...etc)
8 réponses
taille Fixe List
la manière la plus simple, que je connaisse, est de créer un élément unique de taille fixe List
avec Arrays.asList(T...)
comme
// Returns a List backed by a varargs T.
return Arrays.asList(s);
"1519100920 Variable" taille List
Si les besoins varient en taille, vous pouvez construire un ArrayList
et la taille fixe List
comme
return new ArrayList<String>(Arrays.asList(s));
et (en Java 7+) vous pouvez utiliser le diamond operator <>
pour le faire
return new ArrayList<>(Arrays.asList(s));
vous pouvez utiliser la méthode utilitaire Arrays.asList
et alimenter qui donnent un nouveau ArrayList
.
List<String> list = new ArrayList<String>(Arrays.asList(s));
autres options:
List<String> list = new ArrayList<String>(Collections.nCopies(1, s));
et
List<String> list = new ArrayList<String>(Collections.singletonList(s));
-
ArrayList(Collection)
constructeur. -
Arrays.asList
méthode. -
Collections.nCopies
méthode. -
Collections.singletonList
méthode.
avec Java 7+, vous pouvez utiliser le" Diamond operator", en remplaçant new ArrayList<String>(...)
par new ArrayList<>(...)
.
Java 9
si vous utilisez Java 9+, Vous pouvez utiliser la List.of
méthode :
List<String> list = new ArrayList<>(List.of(s));
indépendamment de l'utilisation de chaque option ci-dessus, vous pouvez choisir de ne pas utilisez l'emballage new ArrayList<>()
si vous n'avez pas besoin de votre liste pour être mutable.
Avec Java 8 Streams:
Stream.of(object).collect(Collectors.toList())
ou si vous avez besoin d'un ensemble:
Stream.of(object).collect(Collectors.toSet())
les autres réponses utilisent toutes Arrays.asList()
, qui renvoie une liste non modifiable (un UnsupportedOperationException
est lancé si vous essayez d'ajouter ou de supprimer un élément). Pour obtenir une liste mutable vous pouvez envelopper la liste retournée dans un nouveau ArrayList
comme un couple de réponses soulignent, mais une solution plus propre est d'utiliser Guava's listes.newArrayList() (disponible depuis au moins Goyave 10 , sorti en 2011).
pour exemple:
Lists.newArrayList("Blargle!");
Etant donné que la goyave est mentionnée, j'ai pensé suggérer aussi Eclipse Collections (anciennement connues sous le nom de collections GS).
les exemples suivants renvoient tous un List
avec un seul article.
Lists.mutable.of("Just one item");
Lists.mutable.with("Or use with");
Lists.immutable.of("Maybe it must be immutable?");
Lists.immutable.with("And use with if you want");
il existe des méthodes similaires pour d'autres collections.
encore une autre alternative est initialisation à double attelle , e.g.
new ArrayList<String>() {{ add(s); }};
mais c'est inefficace et obscur . Par conséquent seulement adapté:
- en code qui ne fait pas attention aux fuites de mémoire, comme la plupart des tests unitaires et d'autres programmes de courte durée;
- et si aucune des autres solutions ne s'applique, ce qui implique que vous avez parcouru tout le chemin jusqu'ici chercher à peupler un type différent de conteneur que le ArrayList dans la question.