微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实现迭代器设计模式

如何解决实现迭代器设计模式

我有一个示例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 举报,一经查实,本站将立刻删除。