Java映射范围的ID到列表中的字符串

时间:2015-10-17 10:43:23

标签: java list dictionary iso

我有以下代码,它会为我提供所有国家/地区名称的列表:D

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;
}

我现在需要做的是将所有这些国家/地区映射到身份证号码。

ID号将从:32000006开始,以32000260结束

我不确定我需要做些什么来映射数字..我知道基本上我会通过一个方法传递一个int然后该方法将匹配传递给方法的ID然后我需要它返回国名。

我不知道如何解决这个问题,但我注意到的一个问题是ID 32000008属于国家:Åland群岛,但因为它有一个奇怪的A它位于我的列表的末尾。我仍然需要它来获得ID 32000008.

如果有人知道我需要做什么才能完成这个方法,我将不胜感激。

谢谢:)

更新 我尝试使用HashMap并得到了这段代码:

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);
    }

}

哪些输出: {32000006 =国际,32000007 =津巴布韦}

为什么它不起作用的任何想法?

1 个答案:

答案 0 :(得分:0)

i是循环的局部变量。因此,在每次迭代时,它都会重新初始化为32000007.必须在循环之外声明变量:

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

那就是说,为什么不创建一个包含两个字段的国家类:ID和标签,而不是拥有字符串列表和ID字符串映射。然后使用循环创建List<Country>?那样会更清洁。

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++;
}