ใน 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นี้ขัดแย้ง วิธีการอื่น ๆ ทั้งหมดอ้างถึงคุณค่าและไม่ใช่การกระทำ