Java反向Iterator与Iterable方法实现的标准模式及代码风格问询
问题解答
1. 多遍历顺序的通用实现规范
Java官方没有对非默认顺序的遍历实现制定强制标准,目前业界通用的实现逻辑和你给出的示例基本一致:保留Iterable接口实现的遍历作为默认顺序,额外新增方法提供其他顺序的遍历能力。JDK内置容器也遵循该逻辑,比如LinkedList就同时提供了默认正向迭代器,以及descendingIterator()反向迭代器方法。
2. reverseIterable()方法是否可以省略
是否省略完全取决于你的使用场景:
- 增强for循环的语法要求
:后必须是Iterable接口实现类,Iterator实例不能直接用于增强for循环。如果省略reverseIterable(),你就只能手动调用hasNext()/next()方法操作反向迭代器,无法使用for(Query.Entry e : q.reverseIterable())这种简洁写法。 - 如果你不需要用增强for循环做反向遍历,完全可以只保留
reverseIterator()方法,不会影响功能。
如果使用Java 8及以上版本,可以大幅简化reverseIterable()的实现,不需要写完整的匿名内部类结构:
public Iterable<Entry> reverseIterable() { return () -> new ReverseEntryIterator(); }
内容的提问来源于stack exchange,提问作者yas
相关产品推荐
相关产品推荐

