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