Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่างเมธอด Optional.ifPresentOrElse () และ Optional.or () ใน Java 9?


ทั้ง Optional.ifPresentOrElse() และ Optional.or() ได้แนะนำในเวอร์ชัน Java 9 เพื่อปรับปรุงฟังก์ชันการทำงาน Optional.ifPresentOrElse() เมธอดจะตรวจสอบว่ามีค่าอยู่หรือไม่ ใช้การดำเนินการกับค่า มิฉะนั้นจะคืนค่าการกระทำที่ว่างเปล่าในขณะที่ Optional.or() วิธีการตรวจสอบว่ามีค่าอยู่หรือไม่ ตัวเลือกการส่งคืนมีค่า มิฉะนั้น return Optional ใช้กับผู้จัดหา funciton Optional.ifPresentOrElse() เมธอดประกอบด้วยสองพารามิเตอร์ ผู้บริโภค และ รันได้ ในขณะที่ Optional.or() เมธอดมีพารามิเตอร์เพียงตัวเดียว ซัพพลายเออร์ .

ไวยากรณ์ของ Optional.ifPresentOrElse():

โมฆะสาธารณะ ifPresentOrElse(Consumer action, Runnable emptyAction) 

ตัวอย่าง

<ก่อนหน้า นำเข้า java.util.Optional นำเข้า java.util.concurrent.atomic.AtomicInteger คลาสสาธารณะ IfPresentOrElseMethodTest { โมฆะสาธารณะหลัก (String args []) { optionalIsPresent (); ทางเลือก IsEmpty(); } โมฆะคงที่ส่วนตัว optionalIsPresent() { ทางเลือก ทางเลือก =ทางเลือกของ ("ทดสอบ"); AtomicInteger SuccessCounter =ใหม่ AtomicInteger (); AtomicInteger emptyOptionalsCounter =ใหม่ AtomicInteger (); ไม่บังคับifPresentOrElse (x -> successCounter.incrementAndGet(), () -> emptyOptionalsCounter.incrementAndGet()); System.out.println(successCounter.get()); System.out.println(emptyOptionalsCounter.get()); } โมฆะคงที่ส่วนตัว optionalIsEmpty () { ตัวเลือกเสริม =Optional.empty (); AtomicInteger SuccessCounter =ใหม่ AtomicInteger (); AtomicInteger emptyOptionalsCounter =ใหม่ AtomicInteger (); ไม่บังคับifPresentOrElse (x -> successCounter.incrementAndGet(), () -> emptyOptionalsCounter.incrementAndGet()); System.out.println(successCounter.get()); System.out.println(emptyOptionalsCounter.get()) }}

ผลลัพธ์

1001 


ไวยากรณ์ของ Optional.or():

ตัวเลือกสาธารณะ หรือ (ซัพพลายเออร์>) 

ตัวอย่าง

<ก่อน>นำเข้า java.util.Optional; คลาสสาธารณะ OptionalOrMethodTest { โมฆะคงที่สาธารณะหลัก (สตริง args []) { optionalIsPresent (); ทางเลือก IsEmpty(); } โมฆะคงที่ส่วนตัว optionalIsPresent() { ทางเลือก ทางเลือกที่ 1 =ทางเลือกของ ("ทดสอบ 1"); ไม่บังคับ optional2 =ทางเลือกของ ("ทดสอบ2"); ไม่บังคับ<สตริง > optional3 =ทางเลือก1.or (() -> ตัวเลือก 2); System.out.println(ทางเลือก3.get()); } โมฆะคงที่ส่วนตัว optionalIsEmpty () { ไม่บังคับ optional1 =Optional.empty(); ไม่บังคับ optional2 =ทางเลือกของ ("ทดสอบ2"); ไม่บังคับ optional3 =ทางเลือก1.or (() -> ตัวเลือก 2); System.out.println(ทางเลือก3.get()); }}

ผลลัพธ์

Test1Test2