Des cartes avec plusieurs types de valeurs en java
J'ai à accomplir une étrange étrange scénario. Ses décrite comme suit:
Je dois concevoir une Carte où le 'Clés " sont toujours de Chaîne type. Cependant, l '"Valeur " pour l'une des clés peut être un Chaîne ou une Liste(dépend du nombre de valeurs d'un particulier peut avoir. La "valeur" sera une Chaîne si cette clé n'a qu'une valeur et doit être une Liste si la clé contient de nombreuses valeurs). Comment réaliser ce scénario?
Par Exemple: il y a 2 touches dans une carte à savoir "Nom" et "Téléphone Non". Une personne ne peut avoir qu'un nom et des numéros de téléphone multiples. Voici donc la première clé, c'est à dire "Nom" doit avoir "Chaîne" type de Valeur, alors que pour la deuxième clé, c'est à dire de Téléphone "N" doit avoir "Liste" type de Valeur. Comment déclarer une telle Carte. Est-il possible?
OriginalL'auteur Surya Chandra | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
Il est possible de faire quelque chose comme
Map<String, Object>
.Mais: je suggère fortement à penser que votre conception. Vous devez utiliser une classe pour vos personnes à la place. De cette façon, vous pouvez faire:
Map<String, Person>
avecPerson
avoir des getters et setters pour les noms, numéros de téléphone et d'autres informations.Exemple
Person
classe:OriginalL'auteur nfechner
Bien sûr, il est. Choisissez votre poison:
OriginalL'auteur Perception
Bien, pourquoi ne pas faire un
Map<String, List<String>>
? vous pouvez toujours juste ajouter un élément à votre liste s'il y a une valeur ou utiliser un commun supertype de la Chaîne et de Liste, ainsi vous obtenez"Name" -> "Sam Something", "Phone Nos" -> "1234", "5678"
qui a toujours l'habitude de travailler avec votre exemple.La goyave est
ListMultimap
est une meilleure collecte de l'utiliser plutôt que deMap<X, List<Y>>
pourquoi ne serait-il pas de travail? l'objet peut être n'importe quoi, ce qui peut être représenté en java, ou alors j'ai loupé quelque chose ici?
B: merci pour l'information, j'étais pas au courant de ça...
OriginalL'auteur bvanvelsen
Je ferais l'une des opérations suivantes:
Utiliser un
Multimap<String, String>
. Le Multimap devrait contenir une ou plusieurs valeurs associées à chaque touche.Utiliser un
Map<String, Either<String, List<String>>>
. Utiliser un Soit de distinguer entre une ou plusieurs valeurs.OriginalL'auteur John B
Pourquoi ne pas faire un Numéro de classe wrapper qui expose une API pour soring un ou multipel les numéros de téléphone et peut ensuite récupérer un ou tous les (multiples) numéros de téléphone et ensuite faire une carte de la Chaîne de Numéro de téléphone? Quelque chose comme:
}
OriginalL'auteur Shivan Dragon