Optional.ifPresentOrElse()
تعامل مع الحالة الموجودة والفارغة لـ Optional في استدعاء واحد.
مقارنة الكود
✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
greet(user.get());
} else {
handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
this::greet,
this::handleMissing
);
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
تعبير واحد
كلا الحالتين تُعالَجان في استدعاء دالة واحد.
لا get()
يُزيل النمط الخطر isPresent() + get().
سائل
يتسلسل بشكل طبيعي بعد findUser() أو أي دالة تُرجع Optional.
الأسلوب القديم
if/else على Optional
الأسلوب الحديث
ifPresentOrElse()
منذ JDK
9
الصعوبة
مبتدئ
دعم JDK
Optional.ifPresentOrElse()
متاح
متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)
كيف يعمل
تأخذ ifPresentOrElse() Consumer للحالة الموجودة و Runnable للحالة الفارغة. تتجنّب النمط المضاد isPresent/get.
توثيق ذو صلة