Java 8'de, Optional
varsa bir nesneye bir şey yapmak ve yoksa başka bir şey yapmak istiyorum.
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
Bu bir 'işlevsel tarz' değil.
Optional
bir ifPresent()
yöntemi var, ama bir orElse()
yöntemi zincirlemek mümkün değil .
Böylece yazamıyorum:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
@Assylias adlı kişiye yanıt olarak Optional.map()
, aşağıdaki dava için uygun olduğunu düşünmüyorum :
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;
});
Bu durumda, opt
mevcut olduğunda , özelliğini günceller ve veritabanına kaydederim . Kullanılabilir olmadığında, yeni bir obj
veri oluşturur ve veritabanına kaydederim.
Geri dönmek zorunda iki lambdas not edin null
.
Ancak opt
mevcut olduğunda , her iki lambda da idam edilecek. obj
güncellenecek ve veritabanına yeni bir nesne kaydedilecektir. Bunun nedeni return null
ilk lambdadaki. Ve orElseGet()
idam etmeye devam edecek.
return null;
ile return o;
(her ikisi). Ancak yanlış yerde çalıştığınıza dair güçlü bir his var. Bunu üreten sitede çalışmalısınız Optional
. Bu yerde, ara işlem yapılmadan istenen işlemi gerçekleştirmenin bir yolu olmalıdır Optional
.
ifPresent
çelişkilerini biliyorum . Diğer tüm yöntemler, eylemleri değil, değeri ifade eder.