1. Gambaran keseluruhan
Dalam artikel ringkas ini, kita membincangkan konsep pengaturcaraan yang sangat berguna yang dikenali sebagai Pasangan . Pasangan memberikan cara yang mudah untuk menangani kunci mudah untuk mengaitkan nilai dan sangat berguna ketika kita ingin mengembalikan dua nilai dari satu kaedah.
Pelaksanaan sederhana Pair terdapat di perpustakaan inti Java. Di luar itu, perpustakaan pihak ketiga tertentu seperti Apache Commons dan Vavr telah mendedahkan fungsi ini di API masing-masing.
2. Pelaksanaan Java Teras
2.1. The Pasangan Kelas
The Pasangan kelas boleh didapati di javafx.util pakej. Pembina kelas ini mengambil dua argumen, satu kunci dan nilai yang sepadan:
Pair pair = new Pair(1, "One"); Integer key = pair.getKey(); String value = pair.getValue();
Contoh ini menggambarkan pemetaan Integer to String yang sederhana menggunakan konsep Pair.
Seperti yang ditunjukkan, kunci dalam objek pasangan diambil dengan menggunakan kaedah getKey () sementara nilainya diambil dengan memanggil getValue ().
2.2. AbstractMap.SimpleEntry dan AbstractMap.SimpleImmutableEntry
SimpleEntry ditakrifkan sebagai kelas bersarang di dalam kelas AbstractMap . Untuk membuat objek jenis ini, kami dapat memberikan kunci dan nilai kepada pembina:
AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry(1, "one"); Integer key = entry.getKey(); String value = entry.getValue();
Kunci dan nilai dapat diakses melalui kaedah getter dan setter standard.
Selain itu, kelas AbstractMap juga mengandungi kelas bersarang yang mewakili pasangan tidak berubah: kelas SimpleImmutableEntry :
AbstractMap.SimpleImmutableEntry entry = new AbstractMap.SimpleImmutableEntry(1, "one");
Ini berfungsi dengan cara yang serupa dengan kelas pasangan yang boleh berubah, kecuali nilai pasangan tidak dapat diubah. Mencuba untuk melakukannya akan menghasilkan UnsupportedOperationException .
3. Apache Commons
Di perpustakaan Apache Commons, kita dapat mencari kelas Pasangan dalam pakej org.apache.commons.lang3.tuple . Ini adalah kelas abstrak, jadi ia tidak dapat dibuat secara langsung.
Kita dapati di sini, dua subkelas - mewakili pasangan tidak berubah dan berubah: Imm utablePair dan MutablePair.
Kedua-dua pelaksanaan mempunyai akses kepada kaedah kunci / nilai getter / setter:
ImmutablePair pair = new ImmutablePair(2, "Two"); Integer key = pair.getKey(); String value = pair.getValue();
Tidak mengejutkan, percubaan untuk memanggil setValue () pada ImmutablePair menghasilkan UnsupportedOperationException.
Tetapi operasi ini sepenuhnya sah untuk pelaksanaan yang dapat diubah:
Pair pair = new MutablePair(3, "Three"); pair.setValue("New Three");
4. Vavr
Di perpustakaan Vavr, fungsi pasangan disediakan oleh kelas Tuple2 yang tidak berubah :
Tuple2 pair = new Tuple2(4, "Four"); Integer key = pair._1(); String value = pair._2();
Dalam implementasi ini, kita tidak dapat mengubah objek setelah dibuat, jadi metode mutasi mengembalikan contoh baru yang meliputi perubahan yang disediakan:
tuplePair = pair.update2("New Four");
5. Alternatif I - Kelas Kontena Mudah
Sama ada dengan pilihan pengguna atau jika tidak ada perpustakaan yang disebutkan di atas, penyelesaian standard untuk fungsi pasangan adalah membuat kelas kontena sederhana yang merangkumi nilai pulangan yang diinginkan.
Kelebihan terbesar di sini adalah kemampuan untuk memberikan nama kami yang membantu mengelakkan kelas yang sama mewakili objek domain yang berbeza:
public class CustomPair { private String key; private String value; // standard getters and setters }
6. Alternatif II - Susunan
Penyelesaian biasa yang lain adalah dengan menggunakan susunan mudah dengan dua elemen untuk mencapai hasil yang serupa:
private Object[] getPair() { // ... return new Object[] {key, value}; }
Biasanya, kunci terletak pada indeks sifar array sementara nilai yang sepadan terletak pada indeks satu.
7. Kesimpulannya
Dalam tutorial ini, kami telah membincangkan konsep Pasangan di Java dan pelbagai pelaksanaan yang terdapat di Java teras serta perpustakaan pihak ketiga yang lain.
Seperti biasa, anda boleh mendapatkan kod yang menyokong tutorial ini di GitHub.