java - 在 Java 中展平迭代器的迭代器

标签 java algorithm data-structures iterator

在 Java 中展平迭代器的迭代器。如果输入是 [ [1,2], [3,[4,5]], 6],它应该返回 [1,2,3,4,5,6]。实现 hasNext() 和 next()。当内部迭代器或列表为空时要小心。 我认为我的代码不适用于多级内部列表。

public class FlattenList {
    int index = 0;  // keep an index to indicate where the current accessed element is
    List<Integer> flattenedList = new ArrayList<>();    // flattenedList
    public FlattenList(List<List<Integer>> lists){  
        for(List<Integer> list : lists){    // add all inner list to our underlying list.
            flattenedList.addAll(list);
        }
    }
    public boolean hasNext(){   // check if the index has exceeded the list size
        return flattenedList.size() > index? true : false; 
    }
    public Integer next(){  // return the next element, and increment the index
        Integer result = flattenedList.get(index);
        index++;
        return result;
    }

}

最佳答案

所以基本上这就像编写树的深度优先遍历。这棵树的叶子节点是数字,所有内部节点都被建模为迭代器。这是一些伪代码:

void flatten(Iterator<Object> iterator, List<Integer> flattenedList) {
    for (Object o : iterator)  {
        if (o instanceof Iterator) {
          flatten((Iterator) o, flattenedList);
        } else {
          flattenedList.add((Integer) o);
        }
     }
}

关于java - 在 Java 中展平迭代器的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977718/

相关文章:

java - 在 Java 中使用数组实现堆栈

algorithm - 从邻接列表到边列表的快速转换

java - 当没有要求时,Hibernate ManyToOne 总是级联

java - 在 spring boot 中导出指标

java - 如何在rxjava中使用toMap()获取索引

c++ - 在 C++ 中创建具有 x 和 y 最小和最大范围的单链表

java - 将 JSON 转换为 map

c# - 一个元素的 N 和另一个元素的 M 的不同排列数的公式

c++ - 具有嵌套结构的动态数组

c++ - 我的链表反转递归方法代码有什么问题?