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