对象[]的迭代器

Héc*_*tor 0 java collections iterator

有没有办法获取数组的迭代器?像这样的东西:

class MyCollection implements Iterable<String> {

   String[] items;

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

}
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 7

你可以使用Arrays.asList:

return Arrays.asList(items).iterator();
Run Code Online (Sandbox Code Playgroud)

它只是将数组包装在列表实现中,以便您可以iterator()在其上调用该方法.

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


从Java 8中,您还可以使用Arrays.stream得到一个迭代器开箱(,使这个代码也编译如果itemsint[],double[]long[]):

return Arrays.stream(items).iterator();
Run Code Online (Sandbox Code Playgroud)

虽然您将无法使用原始数据类型char,float并且short没有相应的流实现.但是,您可以使用此解决方法:

return IntStream.range(0, items.length).mapToObj(i -> items[i]).iterator();
Run Code Online (Sandbox Code Playgroud)

  • 关于原始数组的好处.将删除我的答案,并添加链接到你的,因为基本上所有我的支持它. (2认同)