Y a-t-il une méthode Utility quelque part qui peut faire cela en 1 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 d'y mettre des jantes sophistiquées.
Eh bien ... le type peut être T
, et non String
. mais vous obtenez le point. (avec tous les contrôles de nullité, contrôles de sécurité ... etc)
List
Le moyen le plus simple, à ma connaissance, 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);
List
Si sa taille varie, vous pouvez construire un ArrayList
et la taille fixeList
comme
return new ArrayList<String>(Arrays.asList(s));
et (dans Java 7+) vous pouvez utiliser le opérateur diamant <>
pour le rendre
return new ArrayList<>(Arrays.asList(s));
Collections.singletonList(object)
la liste créée par cette méthode est immuable.
Vous pouvez utiliser la méthode utilitaire _Arrays.asList
_ et alimenter le résultat dans 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 "l'opérateur diamant", en remplaçant new ArrayList<String>(...)
par new ArrayList<>(...)
.
Java 9
Si vous utilisez Java 9+, vous pouvez utiliser la méthode List.of
:
_List<String> list = new ArrayList<>(List.of(s));
_
Quelle que soit l'utilisation de chacune des options ci-dessus, vous pouvez choisir de ne pas utiliser l'encapsuleur new ArrayList<>()
si vous n'avez pas besoin que votre liste soit mutable.
Avec Java 8 flux:
Stream.of(object).collect(Collectors.toList())
ou si vous avez besoin d'un set:
Stream.of(object).collect(Collectors.toSet())
Les autres réponses utilisent toutes la fonction Arrays.asList()
, qui renvoie une liste non modifiable (une UnsupportedOperationException
est levée si vous essayez d'ajouter ou de supprimer un élément). Pour obtenir une liste modifiable, vous pouvez envelopper la liste renvoyée dans une nouvelle ArrayList
, comme le soulignent quelques réponses, mais une solution plus propre consiste à utiliser Guava'sLists.newArrayList ( ) (disponible depuis au moins Guava 1 , sorti en 2011).
Par exemple:
Lists.newArrayList("Blargle!");
Très simplement:
Arrays.asList("Hi!")
Vu que Guava reçoit une mention, j'ai pensé suggérer également Eclipse Collections (anciennement connu sous le nom de GS Collections).
Les exemples suivants renvoient tous un List
avec un seul élément.
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.
Une autre alternative est initialisation à double accolade , par ex.
new ArrayList<String>() {{ add(s); }};
mais c'est inefficace et obscur . Donc seulement approprié: