Di Java 8, saya ingin melakukan sesuatu ke Optional
objek jika ada, dan melakukan hal lain jika tidak ada.
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
Ini bukan 'gaya fungsional'.
Optional
memiliki ifPresent()
metode, tetapi saya tidak dapat mengaitkan orElse()
metode.
Jadi, saya tidak bisa menulis:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
Sebagai balasan untuk @assylias, saya pikir ini tidak Optional.map()
berfungsi untuk kasus berikut:
opt.map( o -> {
System.out.println("while opt is present...");
o.setProperty(xxx);
dao.update(o);
return null;
}).orElseGet( () -> {
System.out.println("create new obj");
dao.save(new obj);
return null;
});
Dalam hal ini, ketika opt
ada, saya memperbarui propertinya dan menyimpan ke database. Ketika tidak tersedia, saya membuat yang baru obj
dan menyimpan ke database.
Catatan dalam dua lambda saya harus kembali null
.
Tetapi ketika opt
ada, kedua lambda akan dieksekusi. obj
akan diperbarui, dan objek baru akan disimpan ke database. Ini karena return null
dalam lambda pertama. Dan orElseGet()
akan terus dieksekusi.
return null;
dengan return o;
(keduanya). Namun, saya memiliki perasaan kuat bahwa Anda bekerja di tempat yang salah. Anda harus bekerja di situs yang menghasilkan itu Optional
. Di tempat itu harus ada cara melakukan operasi yang diinginkan tanpa perantara Optional
.
ifPresent
bertentangan ini. Semua metode lain merujuk pada nilai dan bukan tindakan.