我有一个类实现了Enumeration<T>
接口,但Java的foreach循环需要Iterator<T>
接口。 Java标准库中是否有Enumeration
到Iterator
适配器?将枚举<T>作为迭代器使用<T>
回答
你需要一个所谓的“适配器”,以使Enumeration
适应不兼容的Iterator
。 Apache公共收藏有EnumerationIterator
。用法:
Iterator iterator = new EnumerationIterator(enumeration);
+1 Apache Commons – vz0 2011-02-15 17:38:23
这回答了这个问题,因为您不能在foreach循环中使用迭代器。 – 2013-01-18 14:37:52
没有什么是标准库的一部分。不幸的是,你将不得不推出自己的适配器。有例子在那里别人怎么做了,例如:
是的,标准库中有一些专门用于此目的的东西:Collections.list – aeropapa17 2016-05-02 17:12:24
如果你可以修改类,那么你可以简单地实现Iterator<T>
过,并添加remove
方法..
一)我敢肯定你的意思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
}
但是这是值得的?
你可以让你的包装构造函数接受一个枚举。 – 2012-04-10 19:07:13
没有必要推出自己的。看看Google的Guava图书馆。具体
Iterators.forEnumeration()
或公共的集合 EnumerationUtils
import static org.apache.commons.collections.EnumerationUtils.toList
toList(myEnumeration)
如果你只是想要的东西在一个for-each循环(所以一个可迭代遍历并不仅是一个迭代器),there's alwaysjava.util.Collections.list(Enumeration<T> e)
(不使用任何外部库)。
- 1. 部队更新TGT
- 2. 尝试使用NSUInteger与枚举(<<)
- 3. 标志和<<枚举操作? C#
- 4. 使用服务负责人获得TGT
- 5. 转换枚举迭代器
- 6. 将枚举器/对象迭代到流
- 7. 不能设置为空的特性“TGT”
- 8. 使用<c:when>用枚举
- 9. 为什么不从枚举延伸<E延伸枚举<E>>
- 10. 枚举大小<String>
- 11. GSSManager.createCredential如何获取Kerberos密钥和TGT?
- 12. 由TGT创建iSCSI目标不能
- 13. 如何使用struts2迭代器迭代列表<String>
- 14. 枚举之间的区别<?扩展ZipEntry>和枚举<ZipEntry>?
- 15. 不能理解游戏中的迭代器,枚举器,枚举器2.0
- 16. 语法<(中<(<'TKEY的,TValue>中)>)> .. ::枚举
- 17. Scalaz迭代器,为BufferedReader创建枚举器
- 18. 迭代器或枚举,我应该使用什么?
- 19. 用一个while循环迭代枚举
- 20. 模板化的QDataStream运算符<<用于枚举
- 21. Java枚举:列出Class <?中的枚举值扩展枚举>
- 22. 枚举图中所有节点值的假迭代器操作
- 23. Java:特定枚举和泛型枚举<?>参数
- 24. 枚举结构内: '之间' 和“枚举<anonymous>
- 25. JSON.Net如何序列化字典<枚举,枚举>?
- 26. 地图<T,T>:迭代器作为参数类型
- 27. 迭代通过可枚举类型的可枚举集合
- 28. 为什么不使用<< EOF代替cat << EOF?
- 29. 枚举System.Collections.Generic.Dictionary中的键<string,string>
- 30. 枚举到列表<special>数据
它更简单一些,不使用枚举器作为其遗留类或不使用每个循环的“增强”。 – 2011-02-15 17:40:51
for-each循环需要Iterable,而不是Iterator;你真的想要哪个? – 2012-04-10 21:22:21