Di Java 8, saya ingin melakukan sesuatu ke Optionalobjek 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'.
Optionalmemiliki 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 optada, saya memperbarui propertinya dan menyimpan ke database. Ketika tidak tersedia, saya membuat yang baru objdan menyimpan ke database.
Catatan dalam dua lambda saya harus kembali null.
Tetapi ketika optada, kedua lambda akan dieksekusi. objakan diperbarui, dan objek baru akan disimpan ke database. Ini karena return nulldalam 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.
ifPresentbertentangan ini. Semua metode lain merujuk pada nilai dan bukan tindakan.