在 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() + ",");
}
}
}
我不确定如何用 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() + ",");
}
}
}