我有一个实现Enumeration<T>接口的类,但是Java的foreach循环需要Iterator<T>接口。在Java的标准库中有Enumeration到Iterator的适配器吗?
发布于 2011-02-16 01:35:28
您需要一个所谓的“适配器”来使Enumeration适应不兼容的Iterator。Apache commons-collections有EnumerationIterator。其用法为:
Iterator iterator = new EnumerationIterator(enumeration);发布于 2013-09-26 22:51:42
如果你只想在for-each循环中迭代一些东西(所以是一个迭代器,而不仅仅是一个迭代器),there's always java.util.Collections.list(Enumeration<T> e) (不使用任何外部库)。
发布于 2011-02-16 01:37:24
a)我很确定你说的是Enumeration,不是Enumerator
b) Guava提供了从枚举生成迭代器的帮助器方法Iterators.forEnumeration(enumeration),但这对您也没有帮助,因为您需要的是Iterable (迭代器的提供者),而不是Iterator
c)你可以用这个helper类来实现:
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
}但这样的努力值得吗?
https://stackoverflow.com/questions/5007082
复制相似问题