Java: Enumeration from Set<String>
I have a simple collections question. I have a Set<String>
object. I want an Enumeration<String>
of the String
s in that Set
. I need an Enumeration<String>
since I am overriding a method that specifically returns an Enumeration<String>
. What is the cleanest/best way to go about it?
Solution 1:
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.
Solution 2:
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());
}
}
Solution 3:
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());