有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

现在,我想将这些实体转换为嵌套对象,如 大陆->;国家->;国家->;地区->;城市希望了解创建嵌套对象的最佳解决方案。创建嵌套对象时会非常混乱。谁能给我最好的解决办法

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

共 (1) 个答案

  1. # 1 楼答案

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

    我假设您只希望有一个“北美”的实例,用于“芝加哥”和“Madison”。因此,也许可以创建一个有大陆词典的“世界”类:

    未经测试的代码:

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

    世界是独特大陆实例的集合,也是新大陆的工厂

    然后,欧洲大陆就会有一张国家地图,充当国家的工厂,在你们的层级结构中重复这种模式

    然后,您的代码与(未经测试的代码)类似:

    Continent continent = World.getContinent(one[0]);
    Country country = continent.getCountry(one[1]);
    State state = country.getState(one[2]);
    .........
    

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