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
开箱即用的迭代器(如果 items
是 int[]
、[=18,也可以编译此代码=] 或 long[]
):
return Arrays.stream(items).iterator();
尽管您无法使用原始数据类型 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);
}
有没有办法获取数组的迭代器?类似的东西:
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
开箱即用的迭代器(如果 items
是 int[]
、[=18,也可以编译此代码=] 或 long[]
):
return Arrays.stream(items).iterator();
尽管您无法使用原始数据类型 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);
}