在 Java 中的另一个对象内按对象循环

Loop by Object inside another Object in Java

我不确定如何用 word 提出这个问题,所以这里有一个例子:

建筑 class 有这样的数据:

Map<Season, List<Info>> infosBySeason = new TreeMap<Season, List<Info>>();

我想做的是循环每个建筑物,按季节信息打印。

赞:

Season 1 :
  Building 1 :
    Info 1, Info 2....
  Building 2 :
    Info 1, Info 2....

Season 2 :
  Building 1 :
    Info 1, Info 2....
  Building 2 :
    Info 1, Info 2....

我应该把 Season 放在外面 class 并为每个 Season 复制建筑吗?

有什么好的方法可以处理 class 之间的这种 "many-to-many" 关系吗?

这将解决问题,seasonMap 包含您需要的顺序的值(假设 classes 实现 Comparable)

Map<Season, Map<Building, List<Info>>> seasonMap = new TreeMap<>();
for (Building building : buildings) {
    for (Map.Entry<Season, List<Info>> e : building.infosBySeason.entrySet()) {
        Season season = e.getKey();
        List<Info> infos = e.getValue();
        if (!seasonMap.containsKey(season)) {
            seasonMap.put(season, new TreeMap<>());
        }

        seasonMap.get(season).put(building, infos);
    }
}

Should I put Season as the outer class and duplicates Building for each Season?

坏主意,你很可能会陷入难以维护的循环依赖。

Is there a nice way to deal with this kind of "many-to-many" relationship between classes?

设计更好的数据模型是简化代码的一种方式。你可以说数据模型很好,如果它有效地解决了你所有的需求。如果您将使用循环,您描述了 99% 的时间,那么最好让 Building 成为 Season class 的成员并反转逻辑。

这可能是另一个想法,假设您创建 类

class Season implements Comparable<Season>
//....
class Building implements Comparable<Building> 
//.....
class Info
//....

Map<Season, Map<Building, List<Info>>> seasonMap = new TreeMap<>();
//initialize and put your values inside seasonMap 
//....

for(Season s: seasonMap.keySet()){
    System.out.println(s.toString()+":");
    Map<Building, List<Info>> map = seasonMap.get(s);
    for(Building b: map.keySet()){
        System.out.println("\t"+b.toString() + ":");
        List<Info> list = map.get(b);
        System.out.print("\t\t");
        for(Info info: list){
            System.out.print(info.toString() + ",");
        }
    }
}