ใน Java 8 ฉันต้องการทำบางสิ่งกับOptional
วัตถุถ้ามีอยู่และทำสิ่งอื่นหากไม่มีอยู่
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
แม้ว่านี่จะไม่ใช่ 'สไตล์การทำงาน' ก็ตาม
Optional
มีifPresent()
วิธีการ แต่ฉันไม่สามารถเชื่อมโยงorElse()
วิธีการใด ๆ
ดังนั้นฉันไม่สามารถเขียน:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
ในการตอบกลับถึง @assylias ฉันไม่คิดว่าจะOptional.map()
ทำงานได้ในกรณีต่อไปนี้:
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;
});
ในกรณีนี้เมื่อopt
มีอยู่ฉันอัพเดตคุณสมบัติและบันทึกลงในฐานข้อมูล เมื่อไม่พร้อมฉันสร้างใหม่obj
และบันทึกลงในฐานข้อมูล
หมายเหตุในสอง lambdas null
ฉันต้องกลับมา
แต่เมื่อopt
มีอยู่แกะทั้งสองจะถูกประหารชีวิต obj
จะได้รับการปรับปรุงและวัตถุใหม่จะถูกบันทึกลงในฐานข้อมูล นี่เป็นเพราะreturn null
แลมบ์ดาในครั้งแรก และorElseGet()
จะดำเนินการต่อไป
return null;
ด้วยreturn o;
(ทั้งคู่) อย่างไรก็ตามฉันมีความรู้สึกที่แข็งแกร่งว่าคุณกำลังทำงานผิดที่ คุณควรทำงานที่ไซต์ที่ผลิตออกOptional
มา Optional
ในสถานที่ที่ว่าควรจะมีวิธีการที่จะดำเนินการตามที่ต้องการโดยไม่ต้องระดับกลาง
ifPresent
นี้ขัดแย้ง วิธีการอื่น ๆ ทั้งหมดอ้างถึงคุณค่าและไม่ใช่การกระทำ