【发布时间】:2019-04-16 04:23:23
【问题描述】:
我有一个名为Item 的实体。 Item可以有父母和孩子。
每个Item都有以下方法:
-
getParent()--> 返回Item -
getChildren()--> 返回List<Item> -
isLeaf()--> 返回Boolean -
getName()--> 返回String
层次结构中的每一层都是建筑工地的一个层,例如,1 层是 House 1,2 层是 Floor 1,3 层是 Room,4 层是 Window。
我有一个List<Item,我需要像这样对它们进行排序:
- 项目 1(房屋 1 > 楼层 1 > 房间 1 > 浴室)
- 项目 2(房屋 1 > 楼层 1 > 房间 2 > 地下室)
- 项目 3(房屋 1 > 楼层 1 > 房间 2 > 门)
- 第 4 项(房屋 1 > 楼层 1 > 房间 2 > 窗户)
- 项目 5(房屋 1 > 楼层 2 > 房间 1 > 门)
我认为我需要某种递归函数,但我无法想象它必须是怎样的。
我已经研究过在 Java 中对具有层次结构的对象进行排序,但我没有找到与我的情况类似的东西。
如果问题不是 100% 明确但很难描述,我将不胜感激。
谢谢。
【问题讨论】:
-
基本上你想对叶子进行排序呢?我想你会在将元素添加到房屋对象时进行排序,然后对叶子进行深度优先查找
-
什么是实体?您不能创建一个名为
Object的新类。 Java 中已经有一个重要的类叫做Object;) -
@flakes 感谢您的评论,但我认为这并不重要,也不会为问题添加任何内容。 “对象”的真实名称是
Objekt(德语中的对象)。我省略了该细节,以避免将人们与不相关的信息混淆。如果你觉得更开心,我可以将Object重命名为Item -
您需要提供一些代码。我不清楚你的实施是什么。是
item(房屋、楼层、房间)类型的所有实体还是那些不同的类?他们是否实现/扩展item类? -
在讨论类设计/方法实现时,有一个类名对于交流非常重要!此外,您应该在问题中提供一些代码,以向我们展示您在什么时候卡住了。尽可能多地定义解决方案,您会发现人们更好地理解您的问题并提供更接近您期望的答案。 顺便说一句,像
Objekt和Item这样的名称对于一个类来说是非常不透明的名称。尝试一些更有意义的东西(使其实际目的显而易见,HouseNode、FloorplanTree等)。良好的命名对于清洁可维护的代码至关重要
标签: java sorting recursion hierarchy comparator