Java:从Set <String>枚举
我有一个简单的collections问题。 我有一个Set<String>
对象。 我想要枚举该集合中的string。 什么是最干净/最好的方式去做呢?
编辑:有没有必要写自己的(虽然我将离开后面的实现下一代的后代) – 见凯文Bourrillion的答案在JDK的。
如果你真的需要一个枚举,可以使用:
Enumeration<String> x = new Vector(set).elements();
如果尽可能使用Iterable<E>
会更好…
更好的select是围绕Iterator<E>
编写一个小的包装类。 这样,您不必为了find一个Enumeration<E>
实例就可以获取副本:
import java.util.*; class IteratorEnumeration<E> implements Enumeration<E> { private final Iterator<E> iterator; public IteratorEnumeration(Iterator<E> iterator) { this.iterator = iterator; } public E nextElement() { return iterator.next(); } public boolean hasMoreElements() { return iterator.hasNext(); } } public class Test { public static void main(String[] args) { Set<String> set = new HashSet<String>(); Enumeration<String> x = new IteratorEnumeration<String>(set.iterator()); } }
java.util.Collections.enumeration(set)
的Javadoc
返回指定集合的枚举。 这提供了与需要枚举作为input的传统API的互操作性。
假设你指的是math意义上的枚举,最干净的方法是通过for循环,适用于任何实现Iterable
类:
Set<String> strs = ... for (String s : strs) { ... }
如果你真的需要一个Enumeration
你可以实现一个适配器类来包装调用iterator()
返回的Iterator
。 Apache Collections库中有一个适配器类: IteratorEnumeration
。
或者你可以使用谷歌的番石榴图书馆:
Set<String> mySet = ... Enumeration<String> = Iterators.asEnumeration(mySet.iterator());