222 votes

Utilisation de la fonction Collections.singletonList() de Java ?

Quelle est l'utilité de Collections.singletonList() en Java ? Je comprends qu'elle renvoie une liste avec un élément. Pourquoi voudrais-je avoir une méthode distincte pour faire cela ? En quoi l'immuabilité joue-t-elle un rôle dans ce cas ?

Y a-t-il des cas d'utilisation particuliers pour cette méthode, qui n'est pas seulement une méthode pratique ?

8 votes

Voici un exemple de l'utilité de ce système. stackoverflow.com/a/1239631/360811

3 votes

5 votes

@sschuberth, veuillez comparer les dates des questions. Le PO n'était pas conscient qu'il pouvait dupliquer une question future.

195voto

Stephen C Points 255558

En javadoc dit ceci :

"Renvoie une liste immuable contenant uniquement l'objet spécifié. La liste retournée est sérialisable."

Vous demandez :

Pourquoi voudrais-je avoir une méthode séparée pour faire cela ?

Principalement par commodité ... pour vous éviter d'avoir à écrire une séquence d'instructions pour .. :

  • créer un objet liste vide
  • y ajouter un élément, et
  • l'envelopper avec un wrapper immuable.

Elle peut également être un peu plus rapide et/ou économiser un peu de mémoire, mais il est peu probable que ces petites économies soient significatives. (Une application qui crée un grand nombre de listes singleton est pour le moins inhabituelle).

Comment l'immuabilité joue-t-elle un rôle ici ?

Il fait partie de la spécification de la méthode ; voir ci-dessus.

Existe-t-il des cas d'utilisation particuliers pour cette méthode, plutôt qu'une simple méthode de commodité ?

Il est clair qu'il y a des cas d'utilisation où il est pratique d'utiliser l'outil de gestion de l'information. singletonList méthode. Mais je ne sais pas comment vous feriez (objectivement) la distinction entre un cas d'utilisation ordinaire et un cas "spécialement utile" ...

33voto

salsinga Points 1693

Extrait de la javadoc

@param  the sole object to be stored in the returned list.
@return an immutable list containing only the specified object.

exemple

import java.util.*;

public class HelloWorld {
    public static void main(String args[]) {
        // create an array of string objs
        String initList[] = { "One", "Two", "Four", "One",};

        // create one list
        List list = new ArrayList(Arrays.asList(initList));

        System.out.println("List value before: "+list);

        // create singleton list
        list = Collections.singletonList("OnlyOneElement");
        list.add("five"); //throws UnsupportedOperationException
        System.out.println("List value after: "+list);
    }
}

Utilisez-le lorsque le code s'attend à une liste en lecture seule, mais que vous ne voulez passer qu'un seul élément dans cette liste. singletonList est (thread-)sûr et rapide.

32voto

Jim Ferrans Points 13673

En voici une voir sur les méthodes singleton :

J'ai trouvé ces diverses méthodes "singleton" utiles pour transmettre une valeur unique à une API qui requiert une collection de cette valeur. Bien sûr, cela fonctionne mieux lorsque le code traitant la valeur transmise n'a pas besoin d'ajouter à la collection.

0 votes

Pouvez-vous m'aider à comprendre cette partie du commentaire ci-dessus ? "Bien sûr, cela fonctionne mieux lorsque le code traitant la valeur transmise n'a pas besoin d'ajouter à la collection." Je n'ai pas compris.

2 votes

Je pense qu'il fait référence à l'impossibilité de modifier la liste transmise, car elle est immuable.

3 votes

@BilboBaggins - Cette déclaration était ironique. :-) L'expression "cela fonctionne mieux quand ..." est plus précisément écrite "cela ne fonctionne du tout que si ...".

11voto

ajain Points 55

Pour répondre à votre question immuable :

Collections.singletonList créera une liste immuable. Une liste immuable (également appelée liste non modifiable) ne peut pas voir son contenu modifié. Les méthodes permettant d'ajouter ou de supprimer des éléments lèveront des exceptions si vous tentez de modifier le contenu.

Une liste singleton ne contient que cet élément et ne peut pas être modifiée.

3voto

Anonumous Points 11

Si une collection Immutable/Singleton fait référence à une collection qui n'a qu'un seul objet et qui n'est plus modifiée, alors la même fonctionnalité peut être obtenue en créant une collection "UnmodifiableCollection" ayant un seul objet. Puisque la même fonctionnalité peut être réalisée par la collection "UnmodifiableCollection" avec un seul objet, alors à quoi sert la collection "Singleton" ?

0 votes

Créez une collection non modifiable avec un objet de la manière "normale" et en utilisant la méthode singleton. Vous voyez alors immédiatement pourquoi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X