如果我要申请我必须存储欧洲所有国家以及他们各自的城市(例如),这将是一个很好的方法吗?
我考虑使用枚举来存储信息,但由于这需要我对大量数据进行硬编码,因此我很快就废弃了这个想法。
之后我考虑过这样的事情:
class Country {
public Country(String name, City... cities) {
//Stuff
}
}
通过这种方式,我可以从.txt中读取城市并相应地创建对象,从而无需手工劳动。但是,这带来了一个新问题,我在哪里存储我的国家列表?我考虑过以下几点:
class Country {
public Country(String name, City... cities) {
//Stuff
}
public static List<Country> getAllCountries() {
return countries;
}
}
但我觉得这样的代码污染了项目的结构和清洁度。
我考虑过使用枚举(乡村)和班级(城市)的组合,但这也感觉不对。
理想情况下,我希望能够像枚举Country.FRANCE
或Country.getByName("France")
那样访问国家/地区,但这似乎都不是解决方案。所以,我回到我最初的问题。这样做的好方法是什么?
答案 0 :(得分:0)
城市列表很大,您可能需要的不仅仅是一个国家或城市的名称。将此信息存储在文件中以供常规使用是不切实际的,并且绝对不是枚举。相反,您可以使用数据库,您可以使用Geonames数据填充该数据库。 Geonames数据库包含有关城市位置的信息以及更多其他信息。您可以使用ISO 3166-1 alpha-2代码来标识国家/地区和Geoname ID以引用该国家/地区的城市。如果您想要以不同语言显示国家/地区列表,还有国家/地区的本地化名称。
此数据可从此处下载(说明如下): http://download.geonames.org/export/dump/
您可以轻松找到用于将文件导入Github中所选数据库的代码 - 有很多例子可以做到这一点。
使用数据库,您的代码可能如下所示:
class CountryRepository {
public Country findByISOCode(String code) { ... }
public List<Country> findAll() {
// JDBC or JPA query
}
}
class SomeBusinessLogic {
private CountryRepository countries;
private CityRepository cities;
...
Country france = countries.findByISOCode("FR");
List<City> largestFrenchCities = cities.findTopLargestIn(france, 5);
}
答案 1 :(得分:0)
您可以使用HashMap。这是密钥和值对的存储。 它看起来像这样:
HashMap<Country, City> europe = new HashMap<Country, City>();