我有一个实现了 Enumeration<T>
接口的类,但是 Java 的 foreach 循环需要 Iterator<T>
接口。Java 标准库中是否有 Enumeration
到 Iterator
的适配器?
我有一个实现了 Enumeration<T>
接口的类,但是 Java 的 foreach 循环需要 Iterator<T>
接口。Java 标准库中是否有 Enumeration
到 Iterator
的适配器?
如果您只需要在for-each循环中迭代某些内容(因此需要一个Iterable而不仅仅是一个Iterator),始终可以使用java.util.Collections.list(Enumeration<T> e)
(不使用任何外部库)。
Enumeration
适配到与之不兼容的Iterator
。Apache commons-collections 提供了EnumerationIterator
。使用方法如下:Iterator iterator = new EnumerationIterator(enumeration);
a) 我相信你的意思是Enumeration
,而不是Enumerator
b) Guava提供了一个帮助方法Iterators.forEnumeration(enumeration)
,可以从枚举中生成迭代器,但这对你没有帮助,因为你需要一个Iterable
(迭代器的提供者),而不是一个Iterator
c) 你可以使用这个辅助类来实现:
public class WrappingIterable<E> implements Iterable<E>{
private Iterator<E> iterator;
public WrappingIterable(Iterator<E> iterator){
this.iterator = iterator;
}
@Override
public Iterator<E> iterator(){
return iterator;
}
}
现在你的客户端代码应该像这样:
for(String string : new WrappingIterable<String>(
Iterators.forEnumeration(myEnumeration))){
// your code here
}
Iterators.forEnumeration()
foreach
中使用它,因此Iterator
是一个打字错误。 - Thorbjørn Ravn Andersen标准库中没有适配器可用。不幸的是,您必须编写自己的适配器。其他人已经有了一些示例,例如:
或者在commons-collections中使用EnumerationUtils
import static org.apache.commons.collections.EnumerationUtils.toList
toList(myEnumeration)
如果你可以修改这个类,那么你可以简单地实现 Iterator<T>
并添加 remove
方法。