В 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() будет продолжать выполняться.
