Je ne comprends pas pourquoi vous auriez besoin de java Collections singletonMap ? Est-ce utile dans les applications multithread?
Réponses
Trop de publicités?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.
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.
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.
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.