Szukam bardzo prostego sposobu na stworzenie zestawu.Czy .asSet (...) istnieje w dowolnym interfejsie API?
Arrays.asList("a", "b" ...)
tworzy List<String>
Czy jest coś podobnego do Set
?
Szukam bardzo prostego sposobu na stworzenie zestawu.Czy .asSet (...) istnieje w dowolnym interfejsie API?
Arrays.asList("a", "b" ...)
tworzy List<String>
Czy jest coś podobnego do Set
?
Teraz z Java 8 można to zrobić bez potrzeby osób trzecich struktura:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
Zobacz Collectors.
Ciesz się!
Obecnie z Java 8 jest to prawdopodobnie najlepsza odpowiedź, ponieważ nie zależy od bibliotek zewnętrznych i może być łatwo zaadaptowana do innej kolekcji typy, więc ustawiam to jako zaakceptowane. Wielkie dzięki dla innych wspaniałych rozwiązań. (przy okazji, ten zestaw jest zmienny) – cahen
Kto powiedział, że Java jest zbyt gadatliwa? Oczywiście jest to najlepsza odpowiedź! – BobDoolittle
Bardzo dziękuję @BobDoolittle! –
Można użyć
new HashSet<String>(Arrays.asList("a","b"));
no ale można to zrobić jak ten
new HashSet<String>(Arrays.asList("a", "b", ...));
Korzystanie Guava, to takie proste:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
lub na zmienny zestaw:
Set<String> mySet = Sets.newHashSet("a", "b")
Więcej typów danych zobaczyć Guava user guide
Czy istnieje niezmienna wersja tego? – cahen
@cahen yes: 'Sets.newHashSet (" a "," b ")' lub 'Sets.newLinkedHashSet (" a "," b ")' –
Dodałem wariant zmienny do odpowiedzi. –
Jak mówili inni, zastosowanie:
new HashSet<String>(Arrays.asList("a","b"));
Powód to robi nie istnieć w Javie jest Arrays.asList
Zwraca wielkości lista stałe, innymi słowy:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
Powroty:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Nie ma realizacja JDK o „stałej wielkości” Set
wewnątrz klasy Arrays
. Dlaczego tego chcesz? A Set
gwarantuje, że nie ma duplikatów, ale jeśli piszesz je ręcznie, nie powinieneś potrzebować tej funkcji ... i List
ma więcej metod. Oba interfejsy rozszerzają się o Collection
i Iterable
.
Jak mówili inni, użyj guava Jeśli naprawdę chcesz tej funkcji - ponieważ nie jest w JDK. Spójrz na ich odpowiedzi (w szczególności odpowiedź Michaela Schmeißera), aby uzyskać informacje na ten temat.
To jest najlepsza odpowiedź do tej pory, ponieważ wskazuje, co robi program Arrays.asList(). Wielu twórców wydaje się wierzyć, że Arrays.asList() tworzy java.util.ArrayList, podczas gdy w rzeczywistości tworzy java.util.Arrays $ ArrayList (która jest tylko częściowo zmienna i widok na żywo z podstawowej tablicy) –
ktoś chciałby to zrobić, najczęstszym powodem ręcznego skonstruowania zestawu (lub listy) jest klasa testowa, w której podajesz wartości testowe. –
Dla szczególnych przypadków zestawy z zero lub jeden członków, można użyć:
java.util.Collections.EMPTY_SET
oraz:
java.util.Collections.singleton("A")
dla tych specjalnych przypadków, jest to prawdopodobnie najlepsze rozwiązanie, ponieważ używa standardowego API java.util – arcuri82
Oto mały sposób można użyć
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
W Javie 9, podobna funkcja została dodana przez metod fabrycznych:
Set<String> oneLinerSet = Set.of("a", "b", ...);
(Tam są odpowiednikami dla List
również.)
możliwy duplikat [Java - łatwo konwertuj tablicę do ustawienia] (http://stackoverflow.com/questions/3064423/java-easily-convert-array-to-set) –
to nie jest, creatin g a Ustaw i konwertowanie tablicy na zbiór to nie to samo – cahen