75.9-bo'lim: Ixtiyoriy bo'sh bo'lsa, standart
qiymatni qaytaring
Faqat Optional.get() dan foydalanmang, chunki bu NoSuchElementExceptionni keltirib
chiqarishi mumkin. Optional.orElse(T) va
Optional.orElseGet(Supplier extensions T>)
usullari, agar shunday bo'lsa, standart
qiymatni berish usulini ta'minlaydi.
Ixtiyoriy boʻsh.
OrElse va orElseGet o'rtasidagi muhim farq shundaki, ikkinchisi faqat ixtiyoriy bo'lganda
baholanadi.
bo'sh, oldingisiga berilgan argument esa Ixtiyoriy bo'sh bo'lmasa ham baholanadi. The
orElse
shuning uchun faqat doimiylar uchun ishlatilishi kerak va hech
qachon har qanday hisob-
kitoblarga asoslangan qiymatni ta'minlash uchun ishlatilmasligi kerak.
77.14-bo'lim: Agar qiymat bo'lmasa, istisno qiling
O'z ichiga olgan qiymatni olish yoki o'rnatilmagan bo'lsa, istisno
qilish uchun ixtiyoriyning
orElseThrow() usulidan foydalaning.
Bu get() ni chaqirishga o'xshaydi, bundan tashqari u ixtiyoriy istisno turlariga ruxsat
beradi. Usul
yetkazib beruvchini oladi
tashlash uchun istisnoni qaytarish kerak.
Birinchi misolda usul shunchaki o'z ichiga olgan qiymatni qaytaradi
:
Ikkinchi misolda, qiymat o'rnatilmaganligi sababli usul istisno qiladi:
Xabar bilan istisno qilish kerak bo'lsa, lambda sintaksisidan ham foydalanishingiz mumkin:
optional.orElseThrow(() -> new IllegalArgumentException("Illegal"));
77.15-bo'lim: Yetkazib beruvchidan foydalanib,
birlamchi qiymatni dangasalik bilan taqdim eting
Oddiy orElse usuli Ob'ektni oladi, shuning uchun nima uchun
Yetkazib beruvchini taqdim
etish imkoniyati borligi haqida savol tug'ilishi mumkin.
bu erda (orElseGet usuli).
O'ylab ko'ring:
String value = "something"; return Optional.ofNullable(value) .orElse(getValueThatIsHardToCalculate());
// returns "something"
U hali ham getValueThatIsHardToCalculate() ni chaqiradi, garchi
uning natijasi ishlatilmasa
ham, ixtiyoriy bo'sh emas.
Ushbu jazoning oldini olish uchun siz etkazib beruvchiga:
String value = "something"; return Optional.ofNullable(value) .orElseGet(() -> getValueThatIsHardToCalculate()); // returns
"something"
Shu tarzda getValueThatIsHardToCalculate() faqat ixtiyoriy bo'sh bo'lsa chaqiriladi.
77.17-bo'lim: Filtr
filter() faqat sizning predikatingizga mos keladigan qiymatni xohlashingizni bildirish
uchun
ishlatiladi.
Agar (!somePredicate(x)) { x = null; }.
Kod misollari: