В 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
и сохраняю в базе данных.
Обратите внимание, что в двух лямбдах мне нужно вернуть null
.
Но когда присутствует opt
, оба lambdas будут выполнены. obj
будет обновлен, и новый объект будет сохранен в базе данных. Это происходит из-за return null
в первой лямбда. И orElseGet()
будет продолжать выполняться.