【问题标题】:Using for-each loop with a function that returns an iterator将 for-each 循环与返回迭代器的函数一起使用
【发布时间】:2013-09-19 05:03:07
【问题描述】:

如何将 for each 循环与在 Java 中返回迭代器的函数一起使用?例如,我想为具有此签名的函数使用 for-each 循环:

public Iterator<Integer> intIterator();

有可能还是我必须使用常规的 for 循环?

【问题讨论】:

    标签: java foreach iterator


    【解决方案1】:

    不幸的是,Java 的 for-each 被定义为需要 Iterable,而 Iterators 不是 Iterable。例如,如果您想为树提供 3 种迭代器或在数据结构上提供前向和后向迭代器,这可能会很痛苦。

    最简单的方法是使用常规的 for 循环,但如果您愿意,可以编写一个包装类,如下所示:

    public class IteratorWrapper<E> implements Iterable<E> {
        private Iterator<E> iterator;
    
        public IteratorWrapper(Iterator<E> iterator) {
            this.iterator = iterator;
        }
    
        public Iterator<E> iterator() {
            return iterator;
        }
    
        // Static import the following method for less typing at the
        // call sites.
        public static <E> IteratorWrapper<E> wrapIter(Iterator<E> iterator) {
            return new IteratorWrapper<E>(iterator);
        }
    }
    

    【讨论】:

      【解决方案2】:

      for-each 循环只能遍历数组或java.lang.Iterable 的实例。你做不到。

      你可以像这样迭代 -

      Iterator<Integer> iterator = intIterator();
      for (; iterator.hasNext();) {
          Integer type =  iterator.next();
      }
      

      【讨论】:

        【解决方案3】:

        你不能像其他人所说的那样直接使用迭代器。

        制作另一个函数:

        public Iterable<Integer> intIterable() {
            return new Iterable<Integer>() {
                @Override
                public Iterator<Integer> iterator() {
                            return intIterator();
                }
            }
        }
        

        在for-each循环中使用

        for ( Integer int : object.intIterable() ) {
        }
        

        【讨论】:

          猜你喜欢
          • 2015-05-21
          • 1970-01-01
          • 2013-04-25
          • 2019-09-16
          • 1970-01-01
          • 2013-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多