Как было сказано в комментариях выше, ваш исходный код на самом деле достаточно эффективен (нам, вероятно, нужны некоторые критерии эффективности):
if (getSentDate() != null) {
if (getSentDate().getFrom() != null && getSentDate().getTo() != null) {
Однако, если вы действительно хотите использовать Optional
для исключить некоторые из нулевых проверок, достаточно использовать только одну:
Optional.ofNullable(getSentDate())
.filter(sentDate -> Objects.nonNull(sentDate.getFrom()))
.filter(sentDate -> Objects.nonNull(sentDate.getTo()))
.ifPresent(date -> nested.put(...));
, в этом случае .ifPresent(date -> nested.put(...))
выполняется только при соблюдении всех 3 условий: getSentDate()
не null
, sentDate.getFrom()
не null
и sentDate.getTo()
также не null
. Однако у нас все еще есть нулевая проверка, и мы «злоупотребляем» Objects # nonNull методом, так как:
API Примечание: Этот метод существует для использования в качестве Предиката, фильтра (Объекты :: nonNull)
Эквивалентом этого является
Optional.ofNullable(getSentDate())
.filter(sentDate -> sentDate.getFrom() != null)
.filter(sentDate -> sentDate.getTo() != null)
.ifPresent(date -> nested.put(...));
Также обратите внимание, что это на самом деле "нарушает" Необязательно использование
API Примечание: Optional предназначен в первую очередь для использования в качестве типа возврата метода, где существует явная необходимость представлять «нет результата», и где использование null может вызвать ошибки.