Apa cara termudah untuk mengonversi a List
ke dalam Set
di Jawa?
java
collections
OHHAI
sumber
sumber
Set
danMap
yang digunakan;HashSet
adalah diasumsikan di sini.Saya setuju dengan sepp2k, tetapi ada beberapa detail lain yang mungkin penting:
akan memberi Anda set yang tidak disortir yang tidak memiliki duplikat. Dalam hal ini, duplikasi diidentifikasi menggunakan metode .equals () pada objek Anda. Ini dilakukan dalam kombinasi dengan metode .hashCode (). (Untuk lebih lanjut tentang kesetaraan, lihat di sini )
Alternatif yang memberikan set diurutkan adalah:
Ini berfungsi jika Foo mengimplementasikan Sebanding. Jika tidak maka Anda mungkin ingin menggunakan komparator:
Ini tergantung pada compareTo () (dari antarmuka yang sebanding) atau bandingkan () (dari pembanding) untuk memastikan keunikan. Jadi, jika Anda hanya peduli tentang keunikan, gunakan HashSet. Jika Anda setelah menyortir, pertimbangkan TreeSet. (Ingat: Optimalkan nanti!) Jika efisiensi waktu penting gunakan HashSet jika efisiensi ruang penting, lihat TreeSet. Perhatikan bahwa implementasi Set dan Peta yang lebih efisien tersedia melalui Trove (dan lokasi lainnya).
sumber
Jika Anda menggunakan perpustakaan Guava :
atau lebih baik:
sumber
ImmutableSet.of()
, misalnya. EDIT: itu mungkin bukan faktor karena semua kelebihan tidak perlu.Menggunakan java 8 Anda dapat menggunakan streaming:
sumber
atau contoh lengkap
sumber
Saya akan melakukan pemeriksaan Null sebelum mengubah ke set.
sumber
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
Anda dapat mengonversi
List<>
keSet<>
sumber
Untuk Java 8 sangat mudah:
sumber
new ArrayList<>()
;-)Java - addAll
Java - Obyek baru
Java-8
Menggunakan Guva
Apache Commons
Java 10
sumber
Jangan lupa teman yang relatif baru, java-8API aliran. Jika Anda perlu daftar preproses sebelum mengonversinya menjadi satu set, lebih baik untuk memiliki sesuatu seperti:
sumber
Cara terbaik untuk menggunakan konstruktor
Di java 8 Anda juga dapat menggunakan stream api ::
sumber
Ada berbagai cara untuk mendapatkan
Set
:Ketika kita menggunakan
Collectors.toSet()
mengembalikan set dan per doc:There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
. Jika kita ingin mendapatkanHashSet
maka kita bisa menggunakan alternatif lain untuk mendapatkan satu set (centangset3
).sumber
Dengan Java 10, sekarang Anda dapat menggunakannya
Set#copyOf
untuk dengan mudah mengkonversiList<E>
ke yang tidak dapat dimodifikasiSet<E>
:Contoh:
Ingatlah bahwa ini adalah operasi yang tidak berurutan, dan
null
elemen tidak diizinkan, karena akan membuang aNullPointerException
.Jika Anda ingin itu dapat dimodifikasi, maka cukup kirimkan ke konstruktor
Set
implementasi.sumber
Solusi yang lebih tangguh dengan Java 8
Optional.ofNullable
sumber
Jika Anda menggunakan Eclipse Collections :
The
MutableSet
antarmuka meluasjava.util.Set
sedangkanMutableIntSet
antarmuka tidak. Anda juga dapat mengonversi apa sajaIterable
menjadiSet
menggunakanSets
kelas pabrik.Ada lebih banyak penjelasan tentang pabrik yang bisa berubah yang tersedia di Eclipse Collections di sini .
Jika Anda menginginkan
ImmutableSet
dariList
, Anda dapat menggunakanSets
pabrik sebagai berikut:Catatan: Saya pengendara untuk Eclipse Collections
sumber
Ingat bahwa, mengonversi dari Daftar ke Set akan menghapus duplikat dari koleksi karena Daftar mendukung duplikat tetapi Set tidak mendukung duplikat di Jawa.
Konversi Langsung: Cara paling umum dan sederhana untuk mengonversi Daftar ke Perangkat
Koleksi Apache Commons: Anda juga dapat menggunakan Commons Collections API untuk mengonversi Daftar ke Perangkat: -
Menggunakan Stream: Cara lain adalah mengonversi daftar yang diberikan ke streaming, lalu streaming untuk mengatur: -
sumber