Вот пример кода, который перечисляет их в иерархии с использованием рекурсии.Класс Item имеет Список детей.Хитрость заключается в добавлении новых детей к нужному родителю.Вот метод, который я создал для этого:
public Item getItemWithParent(int parentID){
Item result = null;
if(this.categoryID == parentID){
result = this;
} else {
for(Item nextChild : children){
result = nextChild.getItemWithParent(parentID);
if(result != null){
break;
}
}
}
return result;
}
Возможно, есть более эффективный способ, но он работает.
Затем, когда вы хотите добавить новые элементы в вашу иерархию,сделать что-то вроде этого:
public void addItem(int categoryID, String name, int parentID) {
Item parentItem = findParent(parentID);
parentItem.addChild(new Item(categoryID, name, parentID));
}
private Item findParent(int parentID) {
return rootNode.getItemWithParent(parentID);
}
Для фактического отображения я просто передаю «уровень табуляции», который говорит, как далеко вкладывать, а затем увеличивает его для каждого дочернего элемента следующим образом:
public String toStringHierarchy(int tabLevel){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < tabLevel; i++){
builder.append("\t");
}
builder.append("-" + name);
builder.append("\n");
for(Item nextChild : children){
builder.append(nextChild.toStringHierarchy(tabLevel + 1));
}
return builder.toString();
}
Что дает мне это:
-electronics
-Television
-21inch
-Test
-23inch
-LCD display
-player
-mp3player
-vcd player
-hd quality
-dvd player