我有一个名为Item
的实体。 Item
可以有父母和孩子。
每个Item
具有以下方法:
getParent()
->返回Item
getChildren()
->返回List<Item>
isLeaf()
->返回Boolean
getName()
->返回String
层次结构中的每个级别都是建筑工地中的一个级别,例如,级别1是房屋1,级别2是楼层1,级别3是房间,级别4是窗口。
我有一个List<Item
,我需要像这样对它们进行排序:
我认为我需要某种递归函数,但我无法想象它必须是什么。
我已经研究过用Java对具有层次结构的对象进行排序,但是找不到与我的情况类似的东西。
如果这个问题不能100%明确但很难描述,我将不胜感激。
谢谢。
答案 0 :(得分:0)
这确实是递归的。问题在于,仅当两个节点处于同一级别时,才能进行简单的递归比较。
// Same level compare
int compareSameLevel(Item item) {
int c = 0;
if (this.getParent != null) {
c = compare(this.getParent(), item.getParent());
}
return (c != 0) ? c : getName().compare(item.getName());
}
但是您可以调整级别以找到一个共同的级别,并假设孩子们紧随父母之后:
// Compare on any level
int compare(Item item) {
Item thisItem = this;
int thisLevel = thisItem.level();
int itemLevel = item.level();
for (int i = thisLevel; i > itemLevel; i--) {
thisItem = thisItem.getParent();
}
for (int j = itemLevel; j > thisLevel; j--) {
item = item.getParent();
}
int c = compareSameLevel(thisItem, item);
return c != 0 ? c : (thisLevel > itemLevel ? -1 : 1);
}
这只是为了给您一个想法。未经测试或编译。
答案 1 :(得分:-1)
伪代码:尝试这样
private static void printChildElements(List<Object> childNodes) {
for(Object childNode : childNodes) {
List<Object > childElements = childNode .....;
if(childElements.size() > 0) {
printChildElements( childElements);
}
}