如何解决实现迭代器设计模式
我有一个示例Example女巫专用字段Hashmap<Integer,CustomObject>
。我的目标是使用CustomObject
接口访问此类中Iterable
的所有实例。首先,我声明Example以实现Iterable<CustomObject>
。然后,我调用iterator()
方法。但是,我不知道是否应该指定hasNext()
等,在主代码中放置什么?这是我到目前为止的内容:
public class Example implements Iterable<Songs>{
private HashMap <Integer,CustomObject>;
@Override
public Iterator<CustomObject> iterator() {
for (CustomObject customObject: this){
System.out.println(customObject);
}
public static void main(String[] args) {
Example.iterator();
}
解决方法
实际上HashMap
具有方法Map::values()
,该方法以Collection<T>
的形式返回值的集合,而实际上是是 {{1}可以返回Iterable<T>
)。
Iterator<T>
此外,您的代码有几个错误:
-
Map<Integer,CustomObject> map = new HashMap<>(); Iterator<CustomObject> iterator = map.values().iterator();
遗漏了字段名,也可能缺少起始名。 - 实施
private HashMap <Integer,CustomObject>;
必须覆盖Iterable<Songs>
。我想你是说public Iterator<CustomObject> iterator()
。 -
class Example implements Iterable<CustomObject>
不是静态方法,因此无法调用Iterable::iterator
。
一个完整的示例,假设Example.iterator();
是Example
的可迭代委托,就像在您的类中一样(您忘记了命名,否则它将无法编译并初始化),那么您可以做到这一点:
HashMap map
并在以下任何代码段中使用
- 只要
public class Example implements Iterable<CustomObject> { private Map<Integer,CustomObject> delegate = ...; // initialize + data @Override public Iterator<CustomObject> iterator() { return this.delegate.values().iterator(); } }
是Example
,它就可以与增强型循环一起使用:Iterable
- 通过实际的
for (CustomObject customObject: new Example()) { // Iterable with enhanced loop System.out.println(customObject); }
:Iterator
- 只要每个
Iterator<CustomObject> iterator = new Example().iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
都通过Stream
返回其Iterable
:Spliterator
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。