Object[] 的迭代器

Iterator of Object[]

有没有办法获取数组的迭代器?类似的东西:

class MyCollection implements Iterable<String> {

   String[] items;

   @Override
   public Iterator<String> iterator() {
      return items.iterator(); //obviously, it doesn't compile.
   }

}

你可以使用 Arrays.asList:

return Arrays.asList(items).iterator();

它只是将数组包装在列表实现中,这样您就可以在其上调用 iterator() 方法。

请注意,此方法仅适用于对象数组。对于原始数组,您必须实现自己的迭代器(例如使用匿名 class)。


从 Java 8 开始,您还可以使用 Arrays.stream 开箱即用的迭代器(如果 itemsint[]、[=18,也可以编译此代码=] 或 long[]):

return Arrays.stream(items).iterator();

尽管您无法使用原始数据类型 charfloatshort,因为没有相应的流实现。但是,您可以使用此解决方法:

return IntStream.range(0, items.length).mapToObj(i -> items[i]).iterator();

您总是可以定义自己的迭代器

public class ArrayItterator<T> implements Iterator<T>{
    private final T[] array;
    int i = 0;
    public ArrayItterator(T[] array) {
        super();
        this.array = array;
    }

    @Override
    public boolean hasNext() { 
          return i<array.length;
    }

    @Override
    public T next() { 
          return array[i++];
    }

}

然后使用它

@Override
   public Iterator<String> iterator() {
        return new ArrayIterator<String>(items);
   }