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

216
19 декабря 2017, 18:05

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

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

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

Answer 1

Можно написать просто как-то так:

return Optional.ofNullable(App.officeAccountDao.insertOfficeAccountStep(officeAccountStep))
    .map(BigInteger::intValue)
    .map(App.officeAccountDao::getOfficeAccountItemById)
    .orElseGet(() -> {
        response.status(404);
        return "";
    });

Использование filter(Objects::nonNull) точно лишнее, т.к. Optional и так внутри себя всё проверяет.

READ ALSO
одна synchronizedMap между двумя классами

одна synchronizedMap между двумя классами

ПриветствуюСтолкнулся со следующей проблемой

171
Как обрабатывать устаревшую страницу?

Как обрабатывать устаревшую страницу?

Допустим, пользователь открыл одну и ту же страницу в двух вкладка (страница обрабатывается ViewScoped бином)Пользователь повзаимодействовал...

121
Autocomplete в Primefaces

Autocomplete в Primefaces

Пытаюсь реализовать autocompleteКод в xhtml файле:

173
Проверить на существование поля в ResultSet

Проверить на существование поля в ResultSet

Как проверить есть ли в ResultSet поле с заданным именем? То есть, перед тем, как сделать

196