Java 对象[]的迭代器

Java 对象[]的迭代器,java,collections,iterator,Java,Collections,Iterator,有没有办法获得数组的迭代器?诸如此类: class MyCollection implements Iterable<String> { String[] items; @Override public Iterator<String> iterator() { return items.iterator(); //obviously, it doesn't compile. } } 您可以使用: 它只是将数组包装在一个列表实现

有没有办法获得数组的迭代器?诸如此类:

class MyCollection implements Iterable<String> {

   String[] items;

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

}
您可以使用:

它只是将数组包装在一个列表实现中,这样您就可以对其调用迭代器方法

请注意,这种方法仅适用于对象数组。对于基本数组,您必须使用匿名类实现自己的迭代器

从Java 8开始,如果项是int[]、double[]或long[],您还可以使用来获得一个现成的迭代器,并使此代码也可以编译:

虽然您不能使用char、float和short等基本数据类型,因为没有相应的流实现。但是,您可以使用以下解决方法:

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);
   }

哇,我没想到会这样!谢谢关于基元数组的好观点。将删除我的答案,只需添加链接到您的,因为这基本上是我所有的赞成它。
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);
   }