Java: Enumeración de<Cadena>

Tengo una simple colecciones pregunta. Tengo un Set<String> objeto. Quiero una enumeración de las cadenas de ese conjunto. ¿Cuál es el más limpio/mejor manera de ir sobre ella?

  • La enumeración, como en java.util.La enumeración? Cualquier razón para no usar java.util.Iterable lugar?
  • sí..porque estoy reemplazar un método que específicamente se devuelve una Enumeración<Cadena>.
  • Creo que se debe aceptar la más votada responder en su lugar.

3 Kommentare

  1. 27

    EDIT: no Hay necesidad de escribir su propia (aunque voy a salir de la aplicación a continuación para la posteridad) – ver Kevin Bourrillion la respuesta para el uno en el JDK.


    Si realmente necesidad de una enumeración, podría utilizar:

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

    Sería mejor utilizar Iterable<E> si es posible, aunque…

    Una mejor alternativa es escribir una pequeña clase de contenedor de alrededor de Iterator<E>. De esa manera usted no tiene que tomar una copia sólo para encontrar una realización 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());
        }
    }
    • Acabo de abajo votado así. No hay necesidad de escribir su propia aplicación cuando el JDK tiene una estática util método que lo hace por usted como señala Kevin Bourrillion.
    • Si el anterior downvoter lo había dicho, que habría sido útil. No puedo borrar mi respuesta ahora, como es la aceptación de uno, pero puedo señalar Kevin…
    • Su respuesta no era mala, sólo había uno mejor disponible después del hecho. Debe haber una insignia por haber aceptado la respuesta negativa de voto totales (actualmente se sienta en uno negativo) 🙂
    • Yo no tengo ningún problema con ser votada abajo debido al hecho de que ya en el JDK. Acabo de objeto a un downvote sin un comentario…
    • Si usted podría unaccept esta respuesta (y lo ideal es aceptar Kevin) me permitiría borrar este. Kevin es una mucho mejor respuesta que la mía, pero no puedo eliminar la mía mientras que usted ha dejado de ser aceptado.
  2. 195

    java.util.Las colecciones.enumeración(set)

    Javadoc

    Devuelve una enumeración más de la colección especificada. Esto proporciona
    interoperabilidad con sistemas de Api que requieren una enumeración como
    de entrada.

    • Ok, me doy cuenta de que mi respuesta es concisa, pero eso es porque eso es todo lo que realmente necesita ser dicho. 🙂 Este método se encuentra en el JDK y no exactamente lo que el cartel está pidiendo. Es extraño para mí que sería ocupa el último lugar.
    • Eficaz Java Artículo 47: Conocer y utilizar las bibliotecas
  3. 5

    Suponiendo que la media de la enumeración en el sentido matemático de la forma más limpia de hacerlo es a través de un bucle, aplicable a cualquier clase que implementa Iterable:

    Set<String> strs = ...
    
    for (String s : strs) {
     ...
    }

    Si usted realmente necesita un Enumeration podría implementar un adaptador de clase para ajustar el Iterator devuelto por una llamada iterator(). Hay un adaptador de clase en el Apache Colecciones de la biblioteca: IteratorEnumeration.

    O usted podría utilizar Google Guayaba biblioteca:

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea