У 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
суперечить. Усі інші методи стосуються значення, а не дії.