Вы можете использовать Optional.map()
и Optional.orElse()
или Optional.orElseThrow()
:
Long maxId = trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId)
.orElse(0);
Отображает значение результата, если оно присутствует. Если нет, он возвращает значение orElse()
или выдает исключение, если вы используете orElseThrow()
.
Вот пример orElseThrow()
:
Long maxId = trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId)
.orElseThrow(RuntimeException::new);
Это может быть полезно, если это ошибка, если результат не найден.
Если вы хотите выполнить что-то только при наличии значения, вы можете использовать это:
Optional<Long> maxId = trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId);
if (maxId.isPresent()) {
// ...
}
Или более короткий вариант:
trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId)
.ifPresent(maxId -> {
// ...
});