打印依赖于其他ArrayList的ArrayList

时间:2019-04-27 23:23:09

标签: java arrays recursion arraylist

我有一个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));
                    }
                }
            }
        }
    }
}

这会产生正确的结果,但是它不是动态的,因为它不适用于所有情况。我将如何使代码更具动态性?我假设需要递归...

0 个答案:

没有答案