Menggunakan Pairs di Java

1. Ikhtisar

Dalam artikel singkat ini, kita membahas konsep pemrograman yang sangat berguna yang dikenal sebagai Pair . Berpasangan menyediakan cara yang nyaman untuk menangani kunci sederhana ke asosiasi nilai dan sangat berguna ketika kita ingin mengembalikan dua nilai dari suatu metode.

Implementasi sederhana dari Pair tersedia di pustaka inti Java. Selain itu, pustaka pihak ketiga tertentu seperti Apache Commons dan Vavr telah mengekspos fungsionalitas ini di API masing-masing.

2. Implementasi Inti Java

2.1. The Pair Kelas

Kelas Pair dapat ditemukan di paket javafx.util . Konstruktor kelas ini mengambil dua argumen, kunci dan nilainya yang sesuai:

Pair pair = new Pair(1, "One"); Integer key = pair.getKey(); String value = pair.getValue(); 

Contoh ini mengilustrasikan pemetaan Integer to String sederhana menggunakan konsep Pair.

Seperti yang ditunjukkan, kunci dalam objek pasangan diambil dengan memanggil metode getKey () sementara nilainya diambil dengan memanggil getValue ().

2.2. AbstractMap.SimpleEntry dan AbstractMap.SimpleImmutableEntry

SimpleEntry didefinisikan sebagai kelas bersarang di dalam kelas AbstractMap . Untuk membuat objek jenis ini, kita dapat memberikan kunci dan nilai ke konstruktor:

AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry(1, "one"); Integer key = entry.getKey(); String value = entry.getValue();

Kunci dan nilai dapat diakses melalui metode pengambil dan penyetel standar.

Selain itu, kelas AbstractMap juga berisi kelas bertingkat yang mewakili pasangan yang tidak dapat diubah: kelas SimpleImmutableEntry :

AbstractMap.SimpleImmutableEntry entry = new AbstractMap.SimpleImmutableEntry(1, "one");

Ini bekerja dengan cara yang mirip dengan kelas pasangan yang bisa berubah, kecuali nilai pasangan tidak bisa diubah. Mencoba melakukannya akan menghasilkan UnsupportedOperationException .

3. Apache Commons

Di pustaka Apache Commons, kita dapat menemukan kelas Pair dalam paket org.apache.commons.lang3.tuple . Ini adalah kelas abstrak, jadi tidak bisa dibuat instance-nya secara langsung.

Kita dapat menemukan di sini, dua subclass - mewakili pasangan yang tidak dapat diubah dan yang dapat berubah: Imm utablePair dan MutablePair.

Kedua implementasi memiliki akses ke metode pengambil / penyetel kunci / nilai:

ImmutablePair pair = new ImmutablePair(2, "Two"); Integer key = pair.getKey(); String value = pair.getValue();

Tidak mengherankan, upaya untuk memanggil setValue () pada ImmutablePair menghasilkan UnsupportedOperationException.

Tetapi operasi tersebut sepenuhnya valid untuk implementasi yang bisa berubah:

Pair pair = new MutablePair(3, "Three"); pair.setValue("New Three"); 

4. Vavr

Di perpustakaan Vavr, fungsionalitas pasangan disediakan oleh kelas Tuple2 yang tidak dapat diubah :

Tuple2 pair = new Tuple2(4, "Four"); Integer key = pair._1(); String value = pair._2(); 

Dalam implementasi ini, kita tidak bisa memodifikasi objek setelah dibuat, jadi metode mutasi mengembalikan contoh baru yang menyertakan perubahan yang diberikan:

tuplePair = pair.update2("New Four"); 

5. Alternatif I - Kelas Kontainer Sederhana

Baik berdasarkan preferensi pengguna atau jika tidak ada salah satu pustaka yang disebutkan di atas, solusi standar untuk fungsionalitas pasangan adalah membuat kelas penampung sederhana yang membungkus nilai kembalian yang diinginkan.

Keuntungan terbesar di sini adalah kemampuan untuk memberikan nama kami yang membantu menghindari memiliki kelas yang sama yang mewakili objek domain yang berbeda:

public class CustomPair { private String key; private String value; // standard getters and setters }

6. Alternatif II - Array

Solusi umum lainnya adalah dengan menggunakan larik sederhana dengan dua elemen untuk mencapai hasil yang serupa:

private Object[] getPair() { // ... return new Object[] {key, value}; }

Biasanya, kunci terletak di indeks nol dari larik sementara nilai yang sesuai terletak di indeks satu.

7. Kesimpulan

Dalam tutorial ini, kita telah membahas konsep Pair di Java dan implementasi berbeda yang tersedia di Java inti serta pustaka pihak ketiga lainnya.

Seperti biasa, Anda dapat menemukan kode yang mendukung tutorial ini di GitHub.