web-dev-qa-db-fra.com

Comment créer rapidement et facilement un répertoire à un élément

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)

277
David T.

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

Taille variable 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));
372
Elliott Frisch
Collections.singletonList(object)

la liste créée par cette méthode est immuable.

329
Andrew

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

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.

66
rgettman

Avec Java 8 flux:

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

ou si vous avez besoin d'un set:

Stream.of(object).collect(Collectors.toSet())
28
Marko Jurisic

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!");
15
user167019

Très simplement:

Arrays.asList("Hi!")
12
SLaks

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.

5
vegemite4me

Une autre alternative est initialisation à double accolade , par ex.

new ArrayList<String>() {{ add(s); }};

mais c'est inefficace et obscur . Donc seulement approprié:

  • dans du code insensible aux fuites de mémoire, comme la plupart des tests unitaires et autres programmes éphémères;
  • et si aucune des autres solutions ne s'applique, ce qui implique, je pense, que vous avez fait défiler l'écran jusqu'à trouver un type de conteneur différent du type ArrayList de la question.
1
Stein