Persimpangan Dua Daftar di Jawa

1. Ikhtisar

Dalam tutorial ini, kita akan belajar cara mengambil perpotongan dua List .

Seperti banyak hal lainnya, ini menjadi lebih mudah berkat pengenalan aliran di Java 8.

2. Persimpangan Dua Daftar String

Mari kita membuat dua Daftar s dari String s dengan beberapa persimpangan - keduanya memiliki beberapa elemen digandakan:

List list = Arrays.asList("red", "blue", "blue", "green", "red"); List otherList = Arrays.asList("red", "green", "green", "yellow");

Dan sekarang kita akan menentukan perpotongan dari daftar dengan bantuan metode aliran :

Set result = list.stream() .distinct() .filter(otherList::contains) .collect(Collectors.toSet()); Set commonElements = new HashSet(Arrays.asList("red", "green")); Assert.assertEquals(commonElements, result);

Pertama, kami menghapus elemen duplikat dengan perbedaan . Kemudian, kami menggunakan filter untuk memilih elemen yang juga terdapat dalam daftar lain .

Akhirnya, kami mengonversi keluaran kami dengan Kolektor . Persimpangan harus memuat setiap elemen yang sama hanya sekali. Urutan seharusnya tidak menjadi masalah, jadi toSet adalah pilihan yang paling mudah, tetapi kita juga dapat menggunakan toList atau metode kolektor lainnya.

Untuk lebih jelasnya, tinjau panduan kami untuk Kolektor Java 8.

3. Persimpangan Daftar Kelas Kustom

Bagaimana jika Daftar kita tidak berisi String melainkan contoh kelas kustom yang telah kita buat? Nah, selama kita mengikuti konvensi Java, solusi dengan metode aliran akan bekerja dengan baik untuk kelas khusus kita.

Bagaimana metode berisi memutuskan apakah objek tertentu muncul dalam daftar? Berdasarkan metode sama . Jadi, kita harus mengganti metode sama dengan dan memastikan bahwa metode ini membandingkan dua objek berdasarkan nilai properti yang relevan.

Misalnya, dua persegi panjang sama jika lebar dan tingginya sama.

Jika kita tidak mengganti metode sama dengan , kelas kita menggunakan implementasi sama dengan kelas induk. Pada akhir hari, atau lebih tepatnya, rantai warisan, metode sama dengan kelas Object akan dieksekusi. Kemudian dua contoh sama hanya jika mereka merujuk ke objek yang persis sama di heap.

Untuk informasi selengkapnya tentang metode sama dengan , lihat artikel kami tentang Kontrak sama dengan Jawa () dan kode hashCode () .

4. Kesimpulan

Dalam artikel singkat ini, kita telah melihat bagaimana menggunakan aliran untuk menghitung perpotongan dari dua daftar. Ada banyak operasi lain yang dulunya cukup membosankan, tetapi cukup mudah jika kita tahu cara menggunakan Java Stream API. Lihat tutorial lebih lanjut kami dengan aliran Java di sini.

Contoh kode tersedia di GitHub.