Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: Enumeration from Set<String>

I have a simple collections question. I have a Set<String> object. I want an Enumeration<String> of the Strings 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?

like image 608
well actually Avatar asked Aug 16 '11 22:08

well actually


People also ask

Can we use enumeration in set?

The EnumSet is one of the specialized implementations of the Set interface for use with the enumeration type. A few important features of EnumSet are as follows: It extends AbstractSet class and implements Set Interface in Java. EnumSet class is a member of the Java Collections Framework & is not synchronized.

How do you create an enum from a string?

You can create Enum from String by using Enum. valueOf() method. valueOf() is a static method that is added on every Enum class during compile-time and it's implicitly available to all Enum along with values(), name(), and cardinal() methods.


2 Answers

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.

like image 86
Kevin Bourrillion Avatar answered Oct 12 '22 02:10

Kevin Bourrillion


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());     } } 
like image 44
Jon Skeet Avatar answered Oct 12 '22 01:10

Jon Skeet