
NestedIterator-扁平化嵌套列表迭代器
发布日期:2021-05-18 07:53:22
浏览次数:20
分类:精选文章
本文共 1929 字,大约阅读时间需要 6 分钟。
NestedIterator设计了一个迭代器,使其能够遍历嵌套的整型列表,顺序展开所有整数。以下是代码实现及详细步骤说明:
代码实现:
import java.util.ArrayList;import java.util.List;public class NestedIterator implements Iterator{ private List list = new ArrayList<>(); public NestedIterator(List nestedList) { flatten(nestedList); } private void flatten(List nestedList) { for (int i = 0; i < nestedList.size(); i++) { NestedInteger nestedInteger = nestedList.get(i); if (!nestedInteger.isInteger()) { List subList = nestedInteger.getList(); flatten(subList); } else { list.add(nestedInteger.getInteger()); } } } @Override public Number next() { if (list.isEmpty()) { return null; } Number num = list.remove(0); return num; } @Override public boolean hasNext() { return !list.isEmpty(); }}
详细步骤说明:
初始化迭代器:
迭代器接受一个嵌套的整型列表nestedList
。在构造时,它初始化一个辅助列表list
,用于存储所有需要遍历的整数。 线性化函数(flatten):
这是一个递归函数,负责将嵌套的列表逐层展开。遍历输入列表中的每个元素:- 如果元素是整数,将其添加到
list
中。 - 如果元素是一个列表,递归调用
flatten
函数,以继续处理子列表中的元素。
迭代器方法(next):
返回当前的整数并移除其元素于list
中。当list
为空时,返回null,指示已无更多元素。 检查是否有下一个元素(hasNext):
只需要检查list
是否为空即可,返回true表示还有元素,false则表示无更多元素。 代码解释:
- nestedList:原始嵌套的整型列表,初始化时传入迭代器。
- list:迭代器维护的辅助列表,将所有整数按顺序存储。
- flatten方法通过递归或迭代的方式,将所有整数收集到
list
中。 - next方法处理当前元素,并返回下一个数。当
list
为空时返回null。 - hasNext方法简单地检查是否还有元素存在。
使用示例:
ListnestedList = new ArrayList<>();nestedList.add(new NestedIntegerImpl([1, [2, [3]]], true));nestedList.add(new NestedIntegerImpl([4], true));NestedIterator iterator = new NestedIterator(nestedList);List result = new ArrayList<>();while (iterator.hasNext()) { result.add(iterator.next());}System.out.println(result); // [1, 2, 3, 4]
这种设计保证了在处理嵌套结构时,能够按深度优先顺序正确遍历所有整数,适用于复杂的嵌套情况。
发表评论
最新留言
很好
[***.229.124.182]2025年04月13日 22时55分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
centos7一步一步搭建docker jenkins 及自定义访问路径重点讲解
2019-03-06
【Flink】Flink 底层RPC框架分析
2019-03-06
MySQL错误日志(Error Log)
2019-03-06
解决:angularjs radio默认选中失效问题
2019-03-06
windows环境下安装zookeeper(仅本地使用)
2019-03-06
缓冲区溢出实例(一)--Windows
2019-03-06
Hadoop学习笔记—Yarn
2019-03-06
Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
2019-03-06
wxWidgets源码分析(3) - 消息映射表
2019-03-06
wxWidgets源码分析(5) - 窗口管理
2019-03-06
wxWidgets源码分析(8) - MVC架构
2019-03-06
wxWidgets源码分析(9) - wxString
2019-03-06
[梁山好汉说IT] 梁山好汉和抢劫银行
2019-03-06
[源码解析] 消息队列 Kombu 之 基本架构
2019-03-06
[源码分析] 消息队列 Kombu 之 启动过程
2019-03-06
wx.NET CLI wrapper for wxWidgets
2019-03-06
ASP.NET MVC Action Filters
2019-03-06
Powershell中禁止执行脚本解决办法
2019-03-06