Mam proste pytanie o kolekcje. Mam obiekt Set<String>
. Chcę wyliczyć ciągi w tym zestawie. Jaki jest najczystszy/najlepszy sposób na zrobienie tego?Java: Wyliczenie z zestawu <String>
Odpowiedz
EDYCJA: Nie ma potrzeby pisania własnych (chociaż zostawię implementację poniżej dla potomności) - zobacz odpowiedź Kevina Bourrilliona na tę z JDK.
Jeśli naprawdę trzeba wyliczenie może przydałby:
Enumeration<String> x = new Vector(set).elements();
Byłoby lepiej używać Iterable<E>
jeśli w ogóle możliwe, choć ...
Lepszą alternatywą jest napisać małą klasę otokową około Iterator<E>
. W ten sposób nie trzeba wziąć kopię tylko znaleźć imlementation z 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());
}
}
@Dvvovator: Chcesz komentarz? –
Ja również głosowałem w dół. Nie ma potrzeby pisania własnych implementacji, gdy JDK ma metodę statycznego wykorzystania, która robi to dla ciebie, jak wskazał Kevin Bourrillion. – Snekse
@Snekse: Jeśli poprzedni downvoter powiedział tak samo, to byłoby pomocne. Nie mogę teraz usunąć mojej odpowiedzi, ponieważ jest to zaakceptowana, ale mogę wskazać na Kevina ... –
Zakładając znaczy wyliczanie w sensie matematycznym najczystszy sposób to zrobić to za pośrednictwem dla pętli, dotyczy dowolnego klasa, która implementuje Iterable
:
Set<String> strs = ...
for (String s : strs) {
...
}
Jeśli naprawdę wymagają Enumeration
można zaimplementować klasę adaptera zawinąć Iterator
zwrócony przez wywołanie iterator()
. W bibliotece zbiorów Apache znajduje się klasa adaptera: IteratorEnumeration
.
Albo można użyć biblioteki Guava Google:
Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
Downvoter ...czy chcesz się wypowiedzieć? – Adamski
java.util.Collections.enumeration(set)
Javadoc
Zwraca wyliczanie nad określonej kolekcji. Zapewnia to zgodność operacyjną ze starszymi API, które wymagają wyliczenia jako wejścia .
Ok, zdaję sobie sprawę, że moja odpowiedź jest lakoniczna, ale to dlatego, że to wszystko, co naprawdę trzeba powiedzieć. :) Ta metoda jest w JDK i robi * dokładnie * to, o co pyta plakat. To dla mnie dziwne, że byłby na ostatnim miejscu. –
Efektywna Java Pozycja 47: Znajomość bibliotek i korzystanie z nich – Ray
Wyliczenie jak w java.util.Enumeration? Każdy powód, aby nie używać java.util.Iterable zamiast? –
tak .. ponieważ nadpisuję metodę, która specyficznie zwraca wyliczenie. –
Charlotte
Myślę, że powinieneś zaakceptować najczęściej wybieraną odpowiedź. –