Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Избавиться от null с помощью Optional

#java


Есть вот такая конструкция

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 "";
}


Но не уверен что это верно. Оно вроде как работает, и даже работает так как надо,
но все таки, по-моему, что-то не так здесь написано
    


Ответы

Ответ 1



Можно написать просто как-то так: return Optional.ofNullable(App.officeAccountDao.insertOfficeAccountStep(officeAccountStep)) .map(BigInteger::intValue) .map(App.officeAccountDao::getOfficeAccountItemById) .orElseGet(() -> { response.status(404); return ""; }); Использование filter(Objects::nonNull) точно лишнее, т.к. Optional и так внутри себя всё проверяет.

Комментариев нет:

Отправить комментарий