I have a simple collections question. I have a Set<String>
object. I want an enumeration of the strings in that set. What is the cleanest/best way to go about it?
EDIT: There's no need to write your own (although I'll leave the implementation below for posterity) - see Kevin Bourrillion's answer for the one in the JDK.
If you really need an enumeration, could could use:
Enumeration<String> x = new Vector(set).elements();
It would be better to use Iterable<E>
if at all possible though...
A better alternative is to write a small wrapper class around Iterator<E>
. That way you don't have to take a copy just to find an imlementation of 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
Returns an enumeration over the specified collection. This provides interoperability with legacy APIs that require an enumeration as input.
Assuming you mean enumeration in the mathematical sense the cleanest way to do this is via a for-loop, applicable to any class that implements Iterable
:
Set<String> strs = ...
for (String s : strs) {
...
}
If you really require an Enumeration
you could implement an adapter class to wrap the Iterator
returned by calling iterator()
. There is an adapter class in the Apache Collections library: IteratorEnumeration
.
Or you could use Google's Guava library:
Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
来源:https://stackoverflow.com/questions/7085990/java-enumeration-from-setstring