2016-09-28 3 views
0

У меня есть блок кода:Java8 упростить выражение, используя факультативный

public Builder withMultiValueMap(MultiValueMap<String, String> multiValueMap) { 
    ... 
    withRespondentId(Long.valueOf(multiValueMap.getFirst("respondentId"))); 
    ... 
    return this; 
} 

Иногда карта может вернуть нуль, если значение для не respondentId ключ. я могу обработать его старым способом, используя что-то вроде

String respondentId = multiValueMap.getFirst("respondentId"); 
    withRespondentId(respondentId == null? null: Long.valueOf(respondentId)); 

... но я хочу сделать это лучше!

Возможно ли упростить использование java8 Дополнительно или другие вещи?

+3

Я не знаю, о лучше ... 'Optional.ofNullable (respondentId) .map (Long :: valueOf) .orElse (null)) ' –

+0

Super. Это точно мне нужно! Спасибо. добавьте ответ, чтобы отметить его. – Sergii

+1

Код будет более чистым рефактором, так что метод 'withRespondentId' не требует« null »(возможно, инициализируется с помощью набора сценариев« null »). Затем вы могли бы написать 'Optional.ofNullable (answerentId) .map (Long :: valueOf) .ifPresent (this :: withRespondentId);' – flakes

ответ

1

Синтаксис, который имеет тот же результат, как это выражение:

respondentId == null? null: Long.valueOf(respondentId) 

является

Optional.ofNullable(respondentId).map(Long::valueOf).orElse(‌​null) 

Так как это на самом деле больше, это не полная победа, хотя он может пройти как более читаемым.

+1

Да, я бы очень предпочел первую версию. –

+0

@LouisWasserman Если у вас есть ссылка с нулевым значением, я обычно думаю, что это ошибка, чтобы вставить ее в Необязательный для вызова дополнительных методов, только для немедленного ее удаления. –

+0

@StuartMarks да? Мы согласны здесь. –

1

Если MultiValueMap ваш собственный класс, вы можете перенести getFirst в

Optional<V> getFirst(K key); 

multiValueMap.getFirst(key).map(Long::valueOf).getOrElse(null); 
+0

org.springframework.util.MultiValueMap Sergii

Смежные вопросы