В 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противоречит этому. Все остальные методы относятся к значению, а не к действиям.