java - 如何在迭代字符串数组列表时创建复杂的嵌套对象
问题描述
我有这样的输入
private String[] one = {"North America","USA","IL","ch","chicago"};
private String[] two = {"North America","USA","WI","ma","madision"};
private String[] three = {"Asia","India","AP","nlr","nlr"};
private String[] four = {"asia","india","TN","ch","chennai"};
并将像这样添加到列表中。
private List<String[]> entities = new ArrayList<>();
private void initializeStringArray(){
entities.add(one);
entities.add(two);
entities.add(three);
entities.add(four);
}
我现在希望将这些实体转换为嵌套对象,例如 Continent->Country->State->District->City。想知道创建嵌套对象的最佳解决方案是什么。创建嵌套对象时非常混乱。谁能给我最好的解决方案。
public class Continents{
private String name;
private Collection<Country> countryCollection;
}
public class Country{
private String name;
private Collection<State> stateCollection;
}
public class State{
private String name;
private Collection<District> districtCollection;
}
public class District{
private String name;
private Collection<City> cityCollection;
}
public class City{
private String name;
}
解决方案
警告:我不知道如何确定哪个解决方案可能是“最佳解决方案”。不过,这里是一种可能的解决方案,也许不是最好的......
我假设您希望只有一个用于 'chicago' 和 'madision' 的 'North America' 实例。因此,也许可以创建一个包含大陆字典的“世界”类:
未经测试的代码:
public final class World {
public static final World shared = new World(); // singleton
private Map<String, Continent> continents = new HashMap<>();
private World() {} // enforce singleton
public final Continent getContinent(String name) {
String lowerCaseName = name.toLowerCase();
Continent continent = this.continents.get(lowerCaseName);
if (null == continent) {
continent = new Continent(name);
this.continents.put(lowerCaseName, continent);
}
return continent;
}
}
World 充当独特 Continent 实例的集合,并充当新 Continents 的工厂。
然后,Continent 将拥有 Country 地图,并充当 Country 的工厂,其模式在您的层次结构中重复出现。
然后你的代码变得类似于(未经测试的代码):
Continent continent = World.getContinent(one[0]);
Country country = continent.getCountry(one[1]);
State state = country.getState(one[2]);
.........
这里的关键点是每个级别都充当容器和工厂,用于下一层的唯一实例。
推荐阅读
- android - InputMethodManager:IME 死机:在 EditText 上快速键入时应用程序冻结
- angular - Angular 6 动态添加模板引用
- c - 在数组的上下文中,int* p 和 int (*p)[] 有什么区别。?
- python-3.x - 使用带有 Twinx 的 matplotlib 的多个 Y 轴
- javascript - 切换表格的可见性时失去 100% 的宽度
- c# - 如何使用循环在水晶报表中显示多个表格?
- php - 为 laravel 项目创建虚拟主机
- python - 忽略关键字典python的一部分
- c# - 具有多参数的多方法或具有对象参数的一种方法
- java - 如何从另一个类中为 TextView 设置文本?