首页 > 解决方案 > 如何在迭代字符串数组列表时创建复杂的嵌套对象

问题描述

我有这样的输入

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

标签: java

解决方案


警告:我不知道如何确定哪个解决方案可能是“最佳解决方案”。不过,这里是一种可能的解决方案,也许不是最好的......

我假设您希望只有一个用于 '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]);
.........

这里的关键点是每个级别都充当容器和工厂,用于下一层的唯一实例。


推荐阅读