Jaki jest najłatwiejszy sposób przekonwertowania pliku List
A Set
na język Java?
java
collections
OHHAI
źródło
źródło
Set
iMap
jedna z nich używa;HashSet
jest założyć tutaj.Zgadzam się z sepp2k, ale istnieją inne szczegóły, które mogą mieć znaczenie:
da ci nieposortowany zestaw, który nie ma duplikatów. W takim przypadku duplikacja jest identyfikowana za pomocą metody .equals () na twoich obiektach. Odbywa się to w połączeniu z metodą .hashCode (). (Aby uzyskać więcej informacji na temat równości, patrz tutaj )
Alternatywą, która daje posortowany zestaw, jest:
Działa to, jeśli Foo implementuje porównywalne. Jeśli tak nie jest, możesz użyć komparatora:
Zależy to od funkcji CompareTo () (z porównywalnego interfejsu) lub Compare () (z komparatora), aby zapewnić unikalność. Jeśli więc zależy Ci na wyjątkowości, skorzystaj z zestawu HashSet. Jeśli chcesz posortować, rozważ zestaw TreeSet. (Pamiętaj: zoptymalizuj później!) Jeśli liczy się efektywność czasu, użyj HashSet, jeśli liczy się wydajność przestrzeni, spójrz na TreeSet. Zauważ, że bardziej wydajne wdrożenia Set i Map są dostępne za pośrednictwem Trove (i innych lokalizacji).
źródło
Jeśli korzystasz z biblioteki Guava :
albo lepiej:
źródło
ImmutableSet.of()
na przykład w przypadku. EDYCJA: to może nie być czynnik, ponieważ wszystkie przeciążenia są niepotrzebne.Za pomocą java 8 możesz korzystać ze strumienia:
źródło
lub pełny przykład
źródło
Wykonałbym sprawdzanie wartości Null przed konwersją na set.
źródło
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
Możesz przekonwertować
List<>
naSet<>
źródło
W przypadku Java 8 jest to bardzo łatwe:
źródło
new ArrayList<>()
;-)Java - addAll
Java - nowy obiekt
Java-8
Korzystanie z Guva
Apache Commons
Java 10
źródło
Nie zapominajmy o naszym stosunkowo nowym przyjacielu, java-8Stream API. Jeśli musisz wstępnie przetworzyć listę przed przekonwertowaniem jej na zestaw, lepiej mieć coś takiego:
źródło
Najlepszy sposób na użycie konstruktora
W java 8 możesz również używać interfejsu API streamu:
źródło
Istnieją różne sposoby uzyskania
Set
jako:Gdy używamy
Collectors.toSet()
zwraca zestaw i zgodnie doc:There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
. Jeśli chcemy uzyskać zestawHashSet
, możemy użyć innej alternatywy, aby uzyskać zestaw (sprawdźset3
).źródło
W Javie 10 możesz teraz
Set#copyOf
łatwo przekonwertować plikList<E>
na niemodyfikowalnySet<E>
:Przykład:
Należy pamiętać, że jest to operacja nieuporządkowana, a
null
elementy nie są dozwolone, ponieważ spowoduje to rzutNullPointerException
.Jeśli chcesz, aby można go było modyfikować, po prostu przekaż go konstruktorowi
Set
implementacji.źródło
Bardziej odporne rozwiązanie Java 8 z
Optional.ofNullable
źródło
Jeśli korzystasz z kolekcji Eclipse :
MutableSet
Interfejs rozszerzajava.util.Set
natomiastMutableIntSet
interfejs nie. Można również przekonwertować dowolnyIterable
DoSet
korzystania zSets
klasy fabrycznej.Więcej wyjaśnień dotyczących modyfikowalnych fabryk dostępnych jest w Eclipse Collections tutaj .
Jeśli chcesz
ImmutableSet
odList
, możesz użyćSets
fabryki w następujący sposób:Uwaga: jestem osobą odpowiedzialną za kolekcje Eclipse
źródło
Pamiętaj, że konwersja z listy do zestawu usunie duplikaty z kolekcji, ponieważ lista obsługuje duplikaty, ale zestaw nie obsługuje duplikatów w Javie.
Bezpośrednia konwersja: najczęstszy i najprostszy sposób konwersji listy na zestaw
Kolekcje Apache Commons: możesz także użyć interfejsu API Commons Commons do konwersji listy na zestaw: -
Korzystanie ze strumienia: Innym sposobem jest konwersja podanej listy do strumienia, a następnie strumieniowanie w celu ustawienia: -
źródło