我有以下代码,它会为我提供所有国家/地区名称的列表: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 =津巴布韦}
为什么它不起作用的任何想法?
答案 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++;
}