101 votes

Quand utiliserais-je la méthode java Collections singletonMap?

Je ne comprends pas pourquoi vous auriez besoin de java Collections singletonMap ? Est-ce utile dans les applications multithread?

143voto

Michael Borgwardt Points 181658

En gros, cela vous permet de faire ceci:

 callAPIThatTakesAMap(Collections.singletonMap(key, value));
 

plutôt que cela:

 Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
 

ce qui est beaucoup plus agréable lorsque vous n'avez qu'une seule paire clé / valeur. Cette situation ne se produit probablement pas très souvent, mais singleton() et singletonList() peuvent être assez souvent utiles.

15voto

Henning Makholm Points 13132

C'est utile si vous devez passer une carte à un code général (en tant que paramètre, ou à la suite d'une méthode) et que vous savez que dans ce cas particulier - mais peut-être pas dans d'autres cas qui transmettent une carte au même général code - la carte que vous voulez passer n'a qu'une seule clé. Dans ce cas, SingletonMap est plus efficace qu'une implémentation de carte complète et également plus pratique pour le programmeur, car tout ce que vous devez dire peut être dit dans le constructeur.

5voto

tskuzzy Points 19279

C'est principalement pour la commodité et l'abstraction. Certaines API prennent comme argument un Collection et il est agréable de disposer d'un moyen simple de convertir des objets en Set ou Map .

singletonMap() et singletonList() ont été réellement introduits après singletonSet() dans Java 1.3 car singletonSet() s'est avéré utile.

0voto

djechlin Points 18051

C'est juste un autre exemple, mais j'ai écrit cette ligne de code:

@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
    return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}

remarque l' @Override. L'interface de manière plus générale peut prendre des cartes de beaucoup de choses; cette instanciation juste renvoie toujours une carte contenant une chose. Notez également que la clé de la carte est un Enum. Si les cartes ne sont jamais censés être grands, ils sont juste censé contenir les résultats des actions sont précisées. Dans mon exemple, il y a jusqu'à 5 actions, et cette instanciation n'utilise qu'un seul d'entre eux.

Pour être complet, EnumSet ou EnumMap est souvent approprié dans ces cas, mais ceux qui sont encore fâcheusement détaillé par rapport au code ci-dessus.

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