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)

231
demandé sur Brian 2013-12-03 22:29:25

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));
314
répondu Elliott Frisch 2015-09-10 16:12:10
Collections.singletonList(object)
263
répondu Andy J 2015-08-11 01:40:46

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

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.

53
répondu rgettman 2018-03-05 21:23:18

Avec Java 8 Streams:

Stream.of(object).collect(Collectors.toList())

ou si vous avez besoin d'un ensemble:

Stream.of(object).collect(Collectors.toSet())
24
répondu Marko Jurisic 2015-08-12 12:24:38

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!");
14
répondu user167019 2016-02-04 06:01:44

très simplement:

Arrays.asList("Hi!")
11
répondu SLaks 2013-12-03 18:31:28

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.

4
répondu vegemite4me 2016-10-19 14:17:51

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.
2
répondu Stein 2017-05-23 12:02:57