首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Enumeration<T>视为Iterator<T>

将Enumeration<T>视为Iterator<T>
EN

Stack Overflow用户
提问于 2011-02-16 01:24:23
回答 7查看 9.1K关注 0票数 15

我有一个实现Enumeration<T>接口的类,但是Java的foreach循环需要Iterator<T>接口。在Java的标准库中有EnumerationIterator的适配器吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-02-16 01:35:28

您需要一个所谓的“适配器”来使Enumeration适应不兼容的Iterator。Apache commons-collections有EnumerationIterator。其用法为:

代码语言:javascript
复制
Iterator iterator = new EnumerationIterator(enumeration);
票数 12
EN

Stack Overflow用户

发布于 2013-09-26 22:51:42

如果你只想在for-each循环中迭代一些东西(所以是一个迭代器,而不仅仅是一个迭代器),there's always java.util.Collections.list(Enumeration<T> e) (不使用任何外部库)。

票数 33
EN

Stack Overflow用户

发布于 2011-02-16 01:37:24

a)我很确定你说的是Enumeration,不是Enumerator

b) Guava提供了从枚举生成迭代器的帮助器方法Iterators.forEnumeration(enumeration),但这对您也没有帮助,因为您需要的是Iterable (迭代器的提供者),而不是Iterator

c)你可以用这个helper类来实现:

代码语言:javascript
复制
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;
    }
}

现在,您的客户端代码将如下所示:

代码语言:javascript
复制
for(String string : new WrappingIterable<String>(
                        Iterators.forEnumeration(myEnumeration))){
    // your code here            
}

但这样的努力值得吗?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5007082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档