2016-11-23 1 views
1

Est-il possible de convertir un fichier Multimap en HashMap? Je sais que nous pouvons convertir des multimap en carte, mais je veux convertir multimap en hashmap. Je ne pense pas que ce soit possible, mais s'il y a un moyen de le faire, s'il vous plaît faites le moi savoir.Guava Mutlimap vers HashMap

+1

Vous ne pouvez pas _cast_ un 'Multimap' à un' HashMap' depuis que - les noms indiquent - ce sont des choses différentes. Vous pouvez appeler 'asMap()' sur 'Multimap' et si vous voulez vous assurer que c'est un' HashMap', essayez 'Maps.newHashMap (multimap.asMap())'. Une note cependant: vous obtiendrez un 'Map >' donc si par hasard vous êtes après un 'Map 'soyez averti que cela risque d'entraîner une perte de données (les multimappages existent pour une raison) . – Thomas

+0

Est-ce que ma réponse vous a aidé? – xenteros

+0

@Thomas Pourquoi ne fournissez-vous pas votre commentaire comme réponse? – mfulton26

Répondre

4

Est-il possible de convertir Multimap en HashMap?

Non, vous ne pouvez pas jeté un Multimap à un HashMap car - comme les noms indiquent - ils sont des choses différentes, à savoir un Multimap est destiné à la carte plusieurs valeurs à une touche alors qu'un Map est destiné à mapper une valeur à une clé. Ainsi, la conversion d'un Multimap<K, V> en un Map donnerait toujours quelque chose comme Map<K, Collection<V>> (ou, selon l'implémentation Multimap réelle et en utilisant une autre méthode un Map<K, List<V>> etc.). Je sais que nous pouvons convertir multimap en carte, mais je veux convertir multimap en hashmap. Vous faites probablement référence à la méthode asMap() qui renvoie Map<K, Collection<V>>. Ce ne sont probablement pas des instances de HashMap mais vous pouvez facilement en créer un en appelant le Maps.newHashMap(multimap.asMap()) qui prend la carte générée et copie les valeurs (références) dans un nouveau HashMap.

+0

'Non, vous ne pouvez pas lancer un Multimap vers un HashMap puisque - les noms indiquent - ce sont des choses différentes 'lol - n'a aucun sens. Vous pouvez lancer 'Exception' à' RunTimeException'. – xenteros

+0

@xenteros Non, vous ne pouvez pas, 'RuntimeException' étend' Exception', pas l'inverse. En ce qui concerne la réponse, cela signifie clairement que 'Multimap' et' Map' sont des interfaces indépendantes, comme développées juste après. –

+0

@xenteros 'RuntimeException' _is an_' Exception' et donc le cas fonctionne (mais pas nécessairement dans les deux sens en fonction de l'implémentation réelle). Cependant, «Multimap» et «Map» sont des choses différentes et ne partagent aucune hiérarchie commune (sauf 'Object' ofc). Juste qu'ils sont les deux cartes ne signifie pas que vous pouvez _cast_ eux. – Thomas