Java sort 按字母顺序排列的具有层次结构的对象列表

我有一个名为ItemItem可以有父母和孩子。

每个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% 清楚,我将不胜感激任何帮助和抱歉,但很难描述。

谢谢。


牛魔王的故事
浏览 227回答 2
2回答

肥皂起泡泡

它确实是递归的。问题在于,只有两个节点处于同一级别时,简单的递归比较才会起作用。// Same level compareint compareSameLevel(Item item) {&nbsp; &nbsp; int c = 0;&nbsp; &nbsp; if (this.getParent != null) {&nbsp; &nbsp; &nbsp; &nbsp; c = compare(this.getParent(), item.getParent());&nbsp; &nbsp; }&nbsp; &nbsp; return (c != 0) ? c : getName().compare(item.getName());}但是您可以调整级别以找到一个共同的级别并假设孩子们追随父母:// Compare on any levelint compare(Item item) {&nbsp; &nbsp; Item thisItem = this;&nbsp; &nbsp; int thisLevel = thisItem.level();&nbsp; &nbsp; int itemLevel = item.level();&nbsp; &nbsp; for (int i = thisLevel; i > itemLevel; i--) {&nbsp; &nbsp; &nbsp; &nbsp; thisItem = thisItem.getParent();&nbsp; &nbsp; }&nbsp; &nbsp; for (int j = itemLevel; j > thisLevel; j--) {&nbsp; &nbsp; &nbsp; &nbsp; item = item.getParent();&nbsp; &nbsp; }&nbsp; &nbsp; int c = compareSameLevel(thisItem, item);&nbsp; &nbsp; return c != 0 ? c : (thisLevel > itemLevel ? -1 : 1);}这只是给你一个想法。它未经测试或编译。

HUWWW

伪代码:试试这样&nbsp; &nbsp; private static void printChildElements(List<Object> childNodes) {&nbsp; &nbsp; for(Object childNode : childNodes) {&nbsp; &nbsp; &nbsp; &nbsp; List<Object > childElements = childNode .....;&nbsp; &nbsp; &nbsp; &nbsp; if(childElements.size() > 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printChildElements( childElements);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java