Saya telah bekerja dengan tipe Opsional baru di Java 8 , dan saya menemukan apa yang tampak seperti operasi umum yang tidak didukung secara fungsional: sebuah "orElseOptional"
Perhatikan pola berikut:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
Ada banyak bentuk dari pola ini, tetapi intinya adalah menginginkan "orElse" pada opsional yang mengambil fungsi yang menghasilkan opsional baru, yang dipanggil hanya jika yang sekarang tidak ada.
Implementasinya akan terlihat seperti ini:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
Saya ingin tahu apakah ada alasan mengapa metode seperti itu tidak ada, jika saya hanya menggunakan Opsional dengan cara yang tidak disengaja, dan cara lain apa yang dilakukan orang untuk menangani kasus ini.
Saya harus mengatakan bahwa menurut saya solusi yang melibatkan kelas / metode utilitas khusus tidak elegan karena orang yang bekerja dengan kode saya belum tentu tahu bahwa mereka ada.
Juga, jika ada yang tahu, apakah metode seperti itu akan dimasukkan dalam JDK 9, dan di mana saya bisa mengusulkan metode seperti itu? Bagi saya, ini sepertinya kelalaian yang cukup mencolok ke API.