我是 Java 新手,我正在制作一个多级控制台菜单。我有一个 Item 类
,它有一个 ArrayList
,它可以包含另一个 Items 以及自己的 Items ArrayLists 等等。
public Item(String key, String name, ArrayList<Item> itemList) {
this.key = key;
this.name = name;
this.itemList = itemList;
}
我需要对所有数组中的每个 Item
执行 info()
(或任何其他方法)(无论我们可以有多少个带有 Item 对象的嵌套数组) 。我写了一些糟糕的、不通用的代码执行方法,仅适用于三级菜单...
public void show() {
for (int i = 0; i != list.size(); i++) {
System.out.println(list.get(i).info());
if (!list.get(i).getItemList().isEmpty()) {
for (int j = 0; j < list.get(i).getItemList().size(); j++) {
System.out.println(list.get(i).getItemList().get(j).info());
if (!list.get(i).getItemList().get(j).getItemList().isEmpty()) {
for (int y = 0; y < list.get(i).getItemList().get(j).getItemList().size(); y++) {
System.out.println(list.get(i).getItemList().get(j).getItemList().get(y).info());
}
}
}
}
}
}
结果如下:
1. Section one.
1.1. Sub-Section one.
1.1.1. Sub-Sub-Section one.
如果我们不知道菜单深度,有没有通用的方法来循环所有项目?
最佳答案
不会撒谎,我不是 Java 程序员,但这是我的尝试:
public void show(List<Item> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).info());
if (!list.get(i).getItemList().isEmpty()) {
show(list.get(i).getItemList());
}
}
}
或者使用 for-each:
public void show(List<Item> list) {
for (Item item : list) {
System.out.println(item.info());
if(!item.getItemList().isEmpty()) {
show(item.getItemList());
}
}
}
这基本上循环遍历您的初始列表,然后打印信息。如果它包含另一个项目列表,则将该子项目列表传递回其自身。然后它将循环遍历您过去的列表,直到没有更多的子项目列表为止。
关于java - 多级菜单ArrayLists中对象的循环(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655235/