将列表数据转换为分层数据

时间:2013-12-02 19:17:54

标签: java list hierarchy

我想将列表数据转换为层次结构。寻找示例代码。

Class State{
     String stateName;
     List<County> counties;
}
Class County{
     String countyName;
     List<Town> towns;
}
Class Town{
     String townName;
     List<House> houses;
}
Class House{
     String streetName;
     String houseNo;
}

数据位于文件或数据库结果集中

State, County, Town, House
NY   , Cook,   Main,  123
NY   , Cook,   Madison, 456
NY   , Hudson, River Rd, 123
NY   , Hudosn, River Rd, 456
NY   , Hudosn, River Rd, 789

我认为国家是独一无二的,因为我在claouse的地方。 结果将是一个国家实例。

到目前为止,我已经尝试过了。我知道它完全错了,必须要使用某种递归,但我总是感到困惑。

        for (Address addrs:resultList) {
        state.setStateName(addrs.getStateName());
        county = new County();
        county.setLoc(addrs.getCountyName);
        townList = new ArrayList<Town>();               

        town = new Town();
        town.setTownName(addrs.getTownName());
        houseList = new ArrayList<House>();

        House house = new House();
        house.sethouse(addrs.getStreetName());
        house.setStatus(addrs.getHouseNo());

        houseList.add(house);
        town.sethouses(houseList);

        townList.add(town);
        loc.setConEntities(townList);
        locations.add(loc);
    }

    state.toJason() .....

1 个答案:

答案 0 :(得分:0)

试着像这样思考;每一行都有从层次结构的顶部到底部的信息。不是为每一行创建一个新的County,Town等实例,而应该检查该对象是否已经存在,只有在它存在时才更新它。例如,在第一行,该县是库克。由于层次结构不包含该县,因此我们创建County的实例并将其保存到层次结构中。当我们在下一行中包含Cook时,我们可以从层次结构中检索该对象并使用Town和house更新它。这种方法显然也适用于城镇(在您的示例中)。考虑使用Map