我有一个ArrayList数组。
例如,
array[0] = a b c d
array[1] = e f g h
array[2] = i
必须打印出数组中的每个ArrayList,但是某些项依赖于其他ArrayList中的项,这些必须首先打印。
level 1 - array[0] = a b* c d
level 2 - array[1] = e* f g h
level 3 - array[2] = i
旁边带有星号的字母必须与下一级的项目一起打印出来。在这种情况下,b必须包含e,f,g,h,因为所有这些字母都在下一级(level2)中。由于e旁边还有一个星星,因此必须先打印出i,因为i在下一个级别(level3)中。结果如下:
a
b
-e
-i
-f
-g
-h
c
d
我有一个HashMap来跟踪哪些字母需要打印下一层。因此,(b,2),(e,3)在地图中,因为b取决于级别2,而3取决于级别3。
这是我尝试过的
public String buildString(int level, String word) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < level; i++) {
sb.append('-');
}
sb.append(" ");
sb.append(word);
return sb.toString();
}
public void printList() {
ArrayList<String> firstLevel = allLevels[0];
for(int i = 0; i < firstLevel.size(); i++) {
String word = firstLevel.get(i);
System.out.println(word);
if(map.containsKey(word)) {
ArrayList<String> anotherLevel = allLevels[map.get(word)];
for(int j = 0; j < anotherLevel.size(); j++) {
String word2 = anotherLevel.get(j);
System.out.println(buildString(map.get(word), word2));
if(map.containsKey(word2)) {
ArrayList<String> anotherAnotherLevel = allLevels[map.get(word2)];
for(int k = 0; k < anotherAnotherLevel.size(); k++) {
String word3 = anotherAnotherLevel.get(k);
System.out.println(buildString(map.get(word2), word3));
}
}
}
}
}
}
这会产生正确的结果,但是它不是动态的,因为它不适用于所有情况。我将如何使代码更具动态性?我假设需要递归...