La meilleure façon de stocker les codes des Pays, les noms, et de Continent en Java
Je veux avoir un List
ou Array
de certains de tri, de stockage de l'information au sujet de chaque pays:
- Code à 2 lettres
- Nom de pays tels que le Brésil
- Continent/région du monde telles que l'Europe de l'est, Amérique du Nord, etc.
Je vais classer chaque pays dans la région/continent manuellement (mais si il existe un moyen de le faire automatiquement cela, faites-le moi savoir). Cette question est au sujet de la façon de stocker et d'accéder le pays. Par exemple, je veux être en mesure de récupérer tous les pays d'Amérique du Nord.
Je ne veux pas utiliser les fichiers de texte ou un tel parce que ce projet seront convertis en javascript à l'aide de Google Web Toolkit. Mais en les stockant dans un Enum ou un autre fichier de ressources, de la sorte, en la séparant du reste du code, est ce que je suis vraiment après.
c'est leur problème :). personne ne souhaitez utiliser ces 3 pays en particulier, de toute façon, et si ils le font, ils peuvent les regarder dans l'ordre alphabétique plutôt que par région
si vous connaissez le pays ne va pas être "utilisé"? vous devez être un véritable expert ...
OriginalL'auteur Click Upvote | 2009-04-03
Vous devez vous connecter pour publier un commentaire.
Il y a 246 pays ISO 3166, vous pourriez obtenir un relais de gros enum sur le dos de cette. Je préfère utiliser fichier XML contenant la liste des pays, vous pouvez le télécharger à partir de http://www.iso.org/ et de les charger (par exemple, lorsque l'application est au départ).
Que, comme vous en avez besoin dans GWT de les charger dans le dos comme l'appel RPC, mais n'oubliez pas de cache (une sorte de lazy loading) afin de ne pas finir avec les charger à chaque fois.
Je pense que ce serait tout de même mieux que de garder dans le code, car vous en aurez fini avec le chargement complet de la liste à chaque fois que le module est accessible, même si l'utilisateur n'aura pas besoin d'utiliser cette liste.
De sorte que vous besoin de quelque chose qui tiendra pays:
Pour GWT cette classe aurait besoin pour mettre en œuvre IsSerializable.
Et vous pouvez charger ces, sur le côté serveur à l'aide de:
Bien sûr, si vous avez besoin de trouver des pays de l'ISO code à 2 lettres vous pourriez l'habitude de changer de Liste de la Carte probablement.
Si, comme vous l'avez mentionné, vous avez besoin d'un autre pays par continent, vous pouvez étendre XML de la norme ISO 3166 et ajouter vos propres éléments. Il suffit de vérifier leur (site web de l'ISO) licence.
OriginalL'auteur Konrad
Juste faire un enum Pays. Java les énumérations peuvent avoir des propriétés, donc, il y a le code de votre pays et le nom. Pour le continent, vous pobably voulez une autre enum.
Pour le stockage et l'accès, une Carte pour chacun des champs que vous serez à la recherche, à la clé sur que ce domaine, serait la solution standard. Puisque vous avez plusieurs valeurs pour le continent, vous devrez utiliser un
Map<?, List<Country>>
, ou une Multimap mise en œuvre par exemple à partir d'Apache commons.Afrique - le continent perdu?
Vous devez être clair que vous stockiez les "en-US" version "nom";)
Une question, comment pourrais-je convertir North_america en amérique du Nord? Est-il une méthode tostring() pour les énumérations?
Être conscient de pays qui appartiennent à deux continents, comme la Russie et la Turquie.
OriginalL'auteur Michael Borgwardt
Si vous avez souvent besoin de faire une recherche par continent, je serais tout simplement faire une série de immuable listes, une pour chaque continent, et les remplir en conséquence. La liste des pays-données pour un continent est probablement ne va pas changer assez fréquemment pour que le coût de la reconstruction d'un tel éventail d'être reconstruit quand quelque chose a besoin d'être modifié.
Aussi, si vous êtes prêt à effectuer des pays-continent classification manuellement, le reste est automatique et peut être fait par programmation.
paramètres Régionaux.getISOCountries()
pour obtenir la liste des codes de pays.paramètres Régionaux.getDisplayCountry()
pour obtenir le nom d'affichage de chaque pays.Une liste immuable est juste une table dont le contenu ne peut pas être changé (voir ReadOnlyCollection). Cependant, j'aime bien Michael approche mieux, et je pense que vous devriez prendre à la place de la mienne.
Eh bien, ils peuvent être combinés: enum Pays { ... static { for(Continent c : Continent.les valeurs()) for(cc Pays : Pays.les valeurs()) si(cc.getContinent() == c) byContinent.get(c).ajouter(cc) } /* conversion avec les Collections.immutableList() et immutableMap() */ ... }
OriginalL'auteur John Feminella
La façon la plus simple de le faire est de créer le pays/continent structure en Java à l'aide d'une carte (ou de la collection) et persistent à l'aide de XStream
Cela va créer une représentation XML de la collection, et vous pouvez les lire que dans votre processus très facilement et de les convertir vers le même type de collection que vous avez initialement créé. En outre, parce que c'est du XML, vous pouvez facilement le modifier à l'extérieur de code. c'est à dire juste dans un éditeur de texte.
Voir le XStream tutoriel pour plus d'info.
OriginalL'auteur Brian Agnew
en utilisant les paramètres Régionaux de l'objet est la meilleure solution je pense, que vous n'avez pas besoin de stocker quoi que ce soit.
Mais si vous êtes en utilisant GWT essayer de le faire sur le côté serveur, comme certains le disent, vous n'aurez pas à travailler correctement sur le côté client (comme il se traduit en javascript), vous pouvez les envoyer au client dans un RPC comme indiqué précédemment.
OriginalL'auteur zeacuss