initialiser la liste en Java en une seule ligne

dans cet article, nous allons discuter de différentes méthodes pour initialiser la liste en Java en une seule ligne.

Java est souvent critiqué pour son niveau de verbosité.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,ajouter (« C »);
liste.ajouter (« C++ »);
liste.add(« Java »);
liste = Collections.unmodifiableList(liste);

Dans ce post, nous allons discuter de diverses méthodes pour initialiser la liste dans une expression unique.

tableaux.asList ()

Arrays.asList() renvoie une liste de taille fixe soutenue par le tableau spécifié. Comme un tableau ne peut pas être modifié structurellement, il n’est pas possible d’ajouter des éléments à la liste ou d’en supprimer., The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(« C », « C++ », « Java »);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList (« C », » C++ », » Java »));

Collections Java

La classe Collections se compose de plusieurs méthodes statiques qui opèrent sur les collections et renvoient une nouvelle collection soutenue par une collection spécifiée.

Collections Collections.addAll()

Collections.addAll() ajoute tous les éléments spécifiés à la collection spécifiée. Les éléments à ajouter peuvent être spécifiés individuellement ou sous forme de tableau., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(liste = new ArrayList<String>(), « C », « C++ », « Java »);

⮚ Collections.unmodifiableList ()

alternativement, on peut remplir une collection en utilisant un constructeur de copie d’une autre collection. Une telle méthode est Collections.unmodifiableList() renvoie une vue non modifiable de la liste spécifiée. Toute tentative de modification de la liste renvoyée entraînera un UnsupportedOperationException.

Collections Collections.,singletonList ()

Si nous voulons une liste contenant un seul élément, nous pouvons utiliser Collections.singletonList() qui renvoie une liste immuable contenant cet élément. La liste lancera un UnsupportedOperationException si une opération de modification est effectuée dessus.

1
Liste des<String> liste = Collections.,singletonList(« Java »);

Double Croisillon d’Initialisation

une Autre alternative est d’utiliser un « Double Croisillon d’Initialisation”. Cela crée une classe interne anonyme avec juste un initialiseur d’instance. Il est préférable d’éviter cette technique car elle coûte une classe supplémentaire à chaque utilisation et contient également des références cachées à l’instance englobante et à tous les objets capturés. Cela peut entraîner des fuites de mémoire ou des problèmes de sérialisation.,v>2

3
4
5
liste<chaîne> liste = vous pouvez également utiliser une chaîne de caractères qui vous permet de créer une nouvelle liste de caractères en utilisant une chaîne de caractères qui vous permet de créer une nouvelle liste de caractères en utilisant une chaîne de caractères qui vous permet de créer une nouvelle liste de caractères.

Java 8

l’API Java 8 stream peut être utilisée pour construire de petites listes en obtenant des flux à partir de méthodes d’usine statiques et en accumulant les éléments d’entrée dans une nouvelle liste à l’aide de collecteurs., For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(« C », « C++ », « Java »)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,d'(« C », « C++ », « Java »)
.recueillir (collectionneurs.toCollection(ArrayList::nouveau));

⮚ Collectionneurs.collectingAndThen ()

Nous pourrions adapter un collecteur pour effectuer une transformation de finition supplémentaire., Par exemple, nous pourrions adapter le collecteur toList() pour toujours produire une liste non modifiable avec:

Java 9

Java 9 a rendu pratique la création d’instances de liste avec un petit nombre d’éléments en fournissant Lists.of() méthodes d’usine statiques qui, For example,

1
List<String> unmodifiableList = List.of(« C », « C++ », « Java »);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., Maintenant, la question évidente est de savoir pourquoi Java 9 a inclus autant de méthodes supplémentaires alors que seuls les var-args peuvent suffire? La raison en est qu’il existe un avantage subtil en termes de performances d’exécution. La version var-args est susceptible de fonctionner plus lentement que les surcharges qui n’utilisent pas varargs. En effet, chaque invocation d’une méthode varargs entraînera une allocation et une initialisation de tableau et n’oubliera pas la surcharge du GC.

selon Javadoc, les instances de liste créées par List.of() ont les caractéristiques suivantes:

  1. elles sont structurellement immuables., Les éléments ne peuvent pas être ajoutés, supprimés ou remplacés. L’appel de n’importe quelle méthode de mutateur entraînera toujours la levée de UnsupportedOperationException. Cependant, si les éléments contenus sont eux-mêmes mutables, cela peut entraîner une modification du contenu de la liste.
  2. ils interdisent les éléments nuls. Les tentatives de les créer avec des éléments null entraînent NullPointerException.
  3. Ils sont sérialisables si tous les éléments sont sérialisables.
  4. L’ordre des éléments dans la liste est le même que l’ordre des arguments ou des éléments dans le tableau.,
  5. ils sont basés sur la valeur. Les appelants ne doivent faire aucune hypothèse sur l’identité des instances renvoyées. Les usines sont libres de créer de nouvelles instances ou de réutiliser des instances existantes. Par conséquent, les opérations sensibles à l’identité sur ces instances (égalité de référence ( = = ), code de hachage d’identité et synchronisation) ne sont pas fiables et doivent être évitées.,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,of (« C », « C++ », »Java »));

Veuillez noter que contrairement aux méthodes statiques sur les classes, les méthodes statiques sur les interfaces ne sont pas héritées, il ne sera donc pas possible de les invoquer via une classe d’implémentation, ni via une instance du type interface.

Guava

Guava fournit également plusieurs méthodes utilitaires statiques relatives aux instances de liste.,

Liste d’initialisation à l’aide de Goyave en Java

Apache Commons Collections

Apache Commons Collections ListUtils classe unmodifiableList() qui retourne un inmodifiable liste soutenue par la liste donnée. Il jette un NullPointerException si la liste donnée est nulle et un UnsupportedOperationException si toute opération de modification est effectuée sur elle.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *