Я хотел бы получить все вложенные элементы из структуры, которая содержит сами элементы, а также элементы, которые содержат сами элементы: при добавлении элементов в эти списки я не знаю, какой это будет элемент, поскольку я толькодобавление элементов общего типа (называемых SuperItem) в этот список. (SubItem и Item также наследуются от SuperItem)
Например, в конце у меня есть список этих SuperItems, который выглядит следующим образом:
SuperItem [Подэлемент A, Подэлемент B, Элемент C, Подэлемент D]
Хотя Элемент C также содержит подэлементы.Поэтому, если у меня есть вложенная структура, которая выглядит развернутой следующим образом:
UnfoldedSuperItem [SubItem A, SubItem B, SubItem C1, SubItem C2, SubItem C3, SubItem D]
Это список, который я хочу получить.Хотя в настоящее время я могу получить только A, B и D из списка SuperItem, но не C1, C2 и C3 при вызове getAllSubItems()
.
public class Item extends SuperItem{
List<SuperItem> superItems;
List<SubItem> subItems;
public Item() {
super();
superItems = new LinkedList<>();
subItems = new LinkedList<>();
}
public void addItem(SuperItem s) {
if (!superItems.contains(s)) {
superItems.add(s);
}
}
//[... a remove method is also in this class, not included here as not in scope]
public List<subItem> getAllSubItems() {
for (superItem s: superItems) {
if (s.getClass() == SubItem.class) {
if (!subItems.contains(s)) {
subItems.add((SubItem) s);
}
} else {
//if it is a item, somehow call the method getAllSubItems() on itself
}
}
return subItems;
}
}
Единственное, чего здесь не хватает, это когда я пришелк этому C-Item, который не является подпунктом.Я хочу развернуть C, чтобы получить все вложенные элементы.
Также, что здесь важно: Элемент также может содержать элементы сам.Таким образом, список может выглядеть так:
SuperItem [Элемент A, Элемент B, Элемент C, Подэлемент D]
и затем развернутый:
SuperItemUnfolded1 [Элемент A1, элемент A2, подэлемент B1, подэлемент B2, элемент C1, элемент C2, подэлемент D]
и более развернуты:
SuperItemUnfolded2 [Подэлемент A1.1, подэлемент A1.2,Подэлемент A2.1, Подэлемент A2.2, Подэлемент B1, Подэлемент B2, Элемент C1.2 и т. Д. И т. Д.])