В моем коде есть следующее:
Optional<Foo> optionalFoo = fooDAO.findByName(name);
Foo foo;
if(!optionalFoo.isPresent()) {
foo = fooDAO.addFoo(name);
} else {
foo = optionalFoo.get();
}
IntelliJ выскочил подсказку с надписью can be replaced with single expression in functional style
. Я попытался заменить этот блок на:
Optional<Foo> optionalFoo = fooDAO.findByName(name);
Foo foo = optionalFoo.orElse(fooDAO.addFoo(name));
Это привело к сбою тестов, так как fooDAO.addFoo(name)
вызывается независимо от того, пуст Optional
или нет, и логика в addFoo
не должна выполняться, если Foo
уже существует.
Можно ли функционально переписать оригинальный блок, не вызывая fooDAO.addFoo(name)
, если в этом нет необходимости?