2017-04-19 1 views
2

Ma question est simple. Qu'est-ce que SingletonImmutableBiMap de guava et pourquoi il contient des mots-clés comme singleton et bi?qu'est-ce que SingletonImmutableBiMap de guava

Il est très clair ce que signifie ImmutableMap mais à quoi servent les deux autres mots-clés?

Quand utiliserons-nous cette implémentation? J'ai remarqué cette classe en appelant

.stream().collect(ImmutableMap.toImmutableMap(ConfigItem::getId, Function.identity()))

Répondre

5

Singleton: 1 ne contient que l'élément. Pour les collections immuables, leur taille ne change pas et vous pouvez donc avoir des implémentations distinctes pour les collections vides, mono-élément ou petites. C'est utile car ils nécessitent beaucoup moins de mémoire que les implémentations générales et peuvent fonctionner plus rapidement. Par exemple. pour une méthode EmptyMapcontains peut être juste return false au lieu de la logique de recherche de table de hachage complexe.

Bi: bidirectionnel, c'est-à-dire que vous pouvez obtenir une clé par valeur ainsi qu'une valeur par clé. Voir https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/BiMap.html.

Quand utiliserons-nous cette implémentation?

Jamais, parce que ce n'est pas public. Son existence est un détail interne.

4

La classe réelle utilisée ici est un détail d'implémentation et vous ne devriez pas vous en inquiéter.

SingletonImmutableBiMap est une instance de ImmutableMap créée lorsque vous collectez un flux contenant un élément. La carte dans ce cas est également un BiMap, puisque toutes les clés et valeur (s) sont uniques. Guava optimise le nombre total de classes en réutilisant SingletonImmutableBiMap pour les cas Map et BiMap.

EDIT:

BTW Vous ne pouvez probablement utiliser Maps.uniqueIndex ici:

Map<Integer, ConfigItem> m = Maps.uniqueIndex(configItems, ConfigItem::getId);