Идиоматический способ записать это на Java таков:
public class Country {
private final String country;
private final String alpha;
private final String number;
// constructor and getters
}
Map<String, Country> map = new HashMap<>();
COUNTRIES.put("AT", new Country("Austria", "AUT", "040");
// etcetera
Лично я бы добавил двухбуквенные коды в качестве дополнительного поля Country
:
- Избегает необходимости «обратного просмотра» для получения двухбуквенного кода.
Позволяет создавать вторичные хеш-таблицы;например, чтобы включить поиск по трехбуквенному коду страны. Например:
Map<String, Country> map2 = new HashMap<>();
for (Country country: map.values()) {
map2.put(country.getAlpha(), country);
}
// That could also be written as:
// Map<String, Country> map2 = map.values().stream()
// .collect(Collectors.toMap(Country::getAlpha, Function.identity())
map2.get("AUT");
Это можно реализовать, используя Map<String, Map<String, String>>
, но это более громоздко, менее эффективно и более хрупко 1 .
1 - Проблемы возникают, если в коде, который строит карты или обращается к нему, есть опечатка. Например, если вы пропустили «country» как «coumtry» в одной из записей карты, компилятор не поднимет ее, и вы получите неожиданный NPE.