Есть вот такая конструкция
Integer insertId = App.officeAccountDao.insertOfficeAccountStep(officeAccountStep).intValue();
OfficeAccountItems officeAccountItems = null;
if (insertId != null) {
officeAccountItems = App.officeAccountDao.getOfficeAccountItemById(insertId);
if (officeAccountItems == null) {
response.status(404);
return "";
}
}
В первой строке происходит добавление в БД и запрос возвращает id добавленной записи. Затем проверяется, равен ли id null или нет, и если не равен, то происходит выборка этой добавленной записи по ее id. Как избавиться от этих проверок на null, используя Optional? Написал вот так
OfficeAccountItems officeAccountItems = Optional.ofNullable(App.officeAccountDao.insertOfficeAccountStep(officeAccountStep))
.map(BigInteger::intValue)
.filter(Objects::nonNull)
.map(id -> App.officeAccountDao.getOfficeAccountItemById(id))
.orElse(null);
if (officeAccountItems == null) {
response.status(404);
return "";
}
Но не уверен что это верно. Оно вроде как работает, и даже работает так как надо, но все таки, по-моему, что-то не так здесь написано
Можно написать просто как-то так:
return Optional.ofNullable(App.officeAccountDao.insertOfficeAccountStep(officeAccountStep))
.map(BigInteger::intValue)
.map(App.officeAccountDao::getOfficeAccountItemById)
.orElseGet(() -> {
response.status(404);
return "";
});
Использование filter(Objects::nonNull)
точно лишнее, т.к. Optional
и так внутри себя всё проверяет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Допустим, пользователь открыл одну и ту же страницу в двух вкладка (страница обрабатывается ViewScoped бином)Пользователь повзаимодействовал...
Как проверить есть ли в ResultSet поле с заданным именем? То есть, перед тем, как сделать