web-dev-qa-db-fra.com

Java: énumération de l'ensemble <String>

J'ai une simple question sur les collections. J'ai un Set<String> objet. Je veux une énumération des chaînes de cet ensemble. Quelle est la façon la plus propre/la meilleure de procéder?

47
well actually

EDIT: Il n'est pas nécessaire d'écrire le vôtre (bien que je laisse l'implémentation ci-dessous pour la postérité) - voir la réponse de Kevin Bourrillion pour celle du JDK.


Si vous vraiment avez besoin d'une énumération, vous pourriez utiliser:

Enumeration<String> x = new Vector(set).elements();

Il serait préférable d'utiliser Iterable<E> si possible si ...

Une meilleure alternative consiste à écrire une petite classe wrapper autour de Iterator<E>. De cette façon, vous n'avez pas besoin d'en prendre une copie juste pour trouver une implémentation de 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());
    }
}
27
Jon Skeet

Java.util.Collections.enumeration(set)

Javadoc

Renvoie une énumération sur la collection spécifiée. Cela permet l'interopérabilité avec les API héritées qui nécessitent une énumération en entrée.

193
Kevin Bourrillion

En supposant que vous entendez l'énumération au sens mathématique, la façon la plus propre de le faire est via une boucle for, applicable à toute classe qui implémente Iterable:

Set<String> strs = ...

for (String s : strs) {
 ...
}

Si vous avez vraiment besoin d'un Enumeration, vous pouvez implémenter une classe d'adaptateur pour encapsuler le Iterator renvoyé en appelant iterator(). Il existe une classe d'adaptateur dans la bibliothèque Apache Collections: IteratorEnumeration .

Ou vous pouvez utiliser la bibliothèque Guava de Google:

Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
5
Adamski