Metode Map.computeIfAbsent ()

1. Ikhtisar

Dalam tutorial ini, kita akan melihat secara singkat metode default baru computeIfAbsent dari antarmuka Map yang diperkenalkan di Java 8.

Secara khusus, kita akan melihat tanda tangannya, penggunaannya, dan cara menangani kasus yang berbeda.

2. Metode Map.computeIfAbsent

Mari kita mulai dengan melihat tanda tangan computeIfAbsent :

default V computeIfAbsent(K key, Function mappingFunction)

The computeIfAbsent Metode membutuhkan dua parameter. Parameter pertama adalah kunci dan parameter kedua adalah fungsi mapping. Penting untuk diketahui bahwa fungsi pemetaan hanya dipanggil jika pemetaan tidak ada.

2.1. Kunci Terkait dengan Nilai Bukan Nihil

Pertama, ia memeriksa apakah kuncinya ada di peta. Jika kunci ada dan nilai bukan nol terkait dengan kunci, maka ia mengembalikan nilai itu:

Map stringLength = new HashMap(); stringLength.put("John", 5); assertEquals((long)stringLength.computeIfAbsent("John", s -> s.length()), 5);

Seperti yang kita lihat, kunci "John" memiliki pemetaan non-null, ia mengembalikan nilai 5. Jika fungsi pemetaan kita digunakan, kita mengharapkan fungsi untuk mengembalikan panjang 4.

2.2. Menggunakan Fungsi Pemetaan untuk Menghitung Nilai

Selain itu, jika kunci tidak ada di peta atau nilai null terkait dengan kunci tersebut, maka ia mencoba untuk menghitung nilai menggunakan fungsi mapping yang diberikan . Juga, itu memasukkan nilai yang dihitung ke dalam peta kecuali nilai yang dihitung adalah nol.

Mari kita lihat penggunaan mappingFunction dalam metode computeIfAbsent :

Map stringLength = new HashMap(); assertEquals((long)stringLength.computeIfAbsent("John", s -> s.length()), 4); assertEquals((long)stringLength.get("John"), 4);

Karena kunci “John” tidak ada, ia menghitung nilai dengan meneruskan kunci sebagai parameter ke mappingFunction .

2.3. Fungsi Pemetaan Mengembalikan null

Selain itu, jika mappingFunction mengembalikan null , peta tidak mencatat pemetaan:

Map stringLength = new HashMap(); assertEquals(stringLength.computeIfAbsent("John", s -> null), null); assertNull(stringLength.get("John"));

2.4. Fungsi Pemetaan Melempar Pengecualian

Terakhir, jika mappingFunction melontarkan pengecualian yang tidak dicentang, pengecualian tersebut akan ditampilkan kembali, dan peta tidak mencatat pemetaan:

@Test(expected = RuntimeException.class) public void whenMappingFunctionThrowsException_thenExceptionIsRethrown() { Map stringLength = new HashMap(); stringLength.computeIfAbsent("John", s -> { throw new RuntimeException(); }); }

Kita melihat bahwa mappingFunction melempar RuntimeException , yang merambat kembali ke computeIfAbsent metode.

3. Kesimpulan

Dalam artikel singkat ini, kami melihat metode computeIfAbsent , tanda tangannya, dan penggunaannya. Akhirnya, kami melihat cara menangani kasus yang berbeda.

Seperti biasa, semua contoh kode ini tersedia di GitHub.