Java 8'de, Optionalvarsa 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.
Optionalbir 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, optmevcut olduğunda , özelliğini günceller ve veritabanına kaydederim . Kullanılabilir olmadığında, yeni bir objveri oluşturur ve veritabanına kaydederim.
Geri dönmek zorunda iki lambdas not edin null.
Ancak optmevcut olduğunda , her iki lambda da idam edilecek. objgüncellenecek ve veritabanına yeni bir nesne kaydedilecektir. Bunun nedeni return nullilk 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.