2015-10-17 1 views
0

je le code suivant qui me obtenir une liste de tous les noms de pays: DJava Mapping plage d'ID à chaînes dans la liste

private List<String> countriesList = new ArrayList<String>(); 

public List<String> getCountriesList() { 

    String[] locales = Locale.getISOCountries(); 

    for (String countryCode : locales) { 

     Locale obj = new Locale("", countryCode); 
     countriesList.add(obj.getDisplayCountry(Locale.ENGLISH)); 

    } 
Collections.sort(countriesList); 
countriesList.add(0, "International"); 
System.out.println(countriesList); 
return countriesList; 
} 

Ce que je dois faire est la carte maintenant tous ces pays à un Numéro d'identification

Le numéro d'identification commencera à: 32.000.006 et se terminent à 32.000.260

Je ne sais pas ce que je dois faire pour obtenir les chiffres mis en correspondance .. Je sais que, fondamentalement, je vais passer un entier par une méthode et cette méthode va correspondre à l'ID qui est transmis à la méthode, puis j'en ai besoin pour retourner le nom du pays.

Je ne suis pas sûr de la façon de s'y prendre mais un problème que j'ai remarqué est que l'ID 32000008 appartient au pays: Åland Islands mais comme il a un A étrange il est à la fin de ma liste. J'ai toujours besoin d'avoir l'ID 32000008 cependant.

Si quelqu'un a une idée de ce que je dois faire pour ma méthode pour terminer ceci, je serai reconnaissant.

Merci de

MISE À JOUR J'essayé d'utiliser un HashMap et a ce code:

public class test{ 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     getCountriesList(); 
    } 

    private static HashMap<Integer,String> countriesList = new HashMap<Integer,String>(); 

    public static void getCountriesList() { 

     String[] locales = Locale.getISOCountries(); 

     for (String countryCode : locales) { 
      int i = 32000007; 
      Locale obj = new Locale("", countryCode); 
      countriesList.put(i,obj.getDisplayCountry(Locale.ENGLISH)); 
      i++; 
     } 
    countriesList.put(32000006,"International"); 
    System.out.println(countriesList); 
    } 

} 

qui sort: {32000006 = International, 32.000.007 = Zimbabwe}

Tous idées pourquoi cela ne fonctionne pas?

+0

Vous connaissez les HashMaps en Java? –

+0

@MB_CE non pas vraiment –

+0

Ainsi, HashMap fait également partie de Java Collection et il vous permet d'ajouter des données avec une clé, quelque chose comme 'hashMap.put (clé, valeur)' et de la même façon vous obtenez des données par clé. Ainsi, vous pouvez utiliser l'ID comme clé pendant le stockage des données du pays dans la HashMap et plus tard l'obtenir par ID. Jetez un oeil à eux http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html –

Répondre

0

i est une variable locale de la boucle. Donc, à chaque itération, il est réinitialisée à 32000007. La variable doit être déclarée hors de la boucle:

int i = 32000007; 
for (String countryCode : locales) { 
    Locale obj = new Locale("", countryCode); 
    countriesList.put(i,obj.getDisplayCountry(Locale.ENGLISH)); 
    i++; 
} 

Cela dit, au lieu d'avoir une liste de chaînes et une carte d'ID de chaînes, pourquoi ne pas vous créez une classe Country avec deux champs: ID et label. Ensuite, utilisez une boucle pour créer un List<Country>? Ce serait beaucoup plus propre.

String[] locales = Locale.getISOCountries(); 
List<Country> countries = new ArrayList<>(); 
int i = 32000007; 
for (String countryCode : locales) { 
    Locale obj = new Locale("", countryCode); 
    countries.add(new Country(i, obj.getDisplayCountry(Locale.ENGLISH))); 
    i++; 
} 
+0

Ce qui serait dans la classe de pays? Avez-vous un code de travail complet? –

+0

Comme je l'ai dit: un champ 'id' de type' int', et un champ 'label' de type' String'. Plus les méthodes que vous voulez (probablement des getters pour accéder à l'ID et aux étiquettes). –

+0

Je ne comprends pas .. Comment cela peut-il fonctionner avec ça dans la classe? Sûrement il a besoin d'autres choses? –