我有一個類實現了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. 使用迭代器作爲參數重載<<運算符
- 3. 嘗試使用NSUInteger與枚舉(<<)
- 4. 枚舉Objective-C和「<<」操作符
- 5. 標誌和<<枚舉操作? C#
- 6. 使用服務負責人獲得TGT
- 7. Java枚舉與迭代器
- 8. 轉換枚舉迭代器
- 9. 將枚舉器/對象迭代到流
- 10. 無法從AD獲得TGT
- 11. 不能設置爲空的特性「TGT」
- 12. Java:從枚舉枚舉<String>
- 13. 枚舉<>枚舉差異
- 14. 迭代<o:importConstants>導入的枚舉值>
- 15. 轉換枚舉<String>來枚舉<object>
- 16. 使用<c:when>用枚舉
- 17. 使用'枚舉'和'枚舉'的原因<Type>'
- 18. 爲什麼不從枚舉延伸<E延伸枚舉<E>>
- 19. 從可枚舉<int>
- 20. 枚舉大小<String>
- 21. 迭代器,ListIterartor和枚舉的實例
- 22. Java枚舉列表迭代器問題
- 23. 傳遞地圖<>:迭代作爲地圖<> ::爲const_iterator&
- 24. 如何迭代Java枚舉?
- 25. 如何迭代枚舉?
- 26. 迭代非枚舉屬性
- 27. 迭代枚舉類實例
- 28. GSSManager.createCredential如何獲取Kerberos密鑰和TGT?
- 29. 由TGT創建iSCSI目標不能
- 30. 返回枚舉器不使用現有的迭代器
它更簡單一些,不使用枚舉器作爲其遺留類或不使用每個循環的「增強」。 – 2011-02-15 17:40:51
for-each循環需要Iterable,而不是Iterator;你真的想要哪個? – 2012-04-10 21:22:21