2015-02-12 1 views
2

Как я могу сделать это с помощью Java 8 Лямбдами:Как я могу проверить две переменные с Java 8 лямбда

Optional<String> code; 
if (accountType.requiresCode() && (!code.isPresent() || empty(code.get()))) { 
    new IllegalArgumentException("Account type " + accountType + " requires code"); 
} 
+0

Optionals может сделать эту работу! http://blog.jhades.org/java-8-how-to-use-optional/ – Digix

+0

'code' является необязательным Oliveira

+3

И в чем проблема с вышеуказанным кодом? Что бы вы получили, используя лямбды, и где? –

ответ

4

Вы можете переписать код, как

Optional<String> code; 
if (accountType.requiresCode()) code.filter(x->!empty(x)).orElseThrow(
() -> new IllegalArgumentException("Account type " + accountType + " requires code") 
); 

или, при условии, что ваш empty(code.get()) на самом деле имел в виду code.get().isEmpty():

Optional<String> code=Optional.empty(); 
if (accountType.requiresCode()) code.filter(x->!x.isEmpty()).orElseThrow(
() -> new IllegalArgumentException("Account type " + accountType + " requires code") 
); 

Но это на самом деле не добавить к читаемости. Лямбда не всегда лучше обычного кода.

+1

Мне нравится идея 'filter', но я думаю, что проверка' isPresent() 'была бы более читаемой. 'if (accountType.requiresCode() &&! code.filter (x ->! empty (x)). isPresent()) {...}' –

+0

Да, это не делает код выглядящим лучше. – Oliveira

1

Вы можете использовать

if (accountType.requiresCode() && code.map(this::empty).orElse(true)) 

, но я не уверен, что это делает код более читаемым.

+0

Разве это не то, для чего «Необязательный.фильтр»? Например. 'code.filter (s ->! empty (s)). isPresent()'; используя 'map' и' orElse' с 'boolean's, чувствует себя так неправильно ... – Holger

+0

Использование фильтра - действительно другое решение. Я просто не думал об этом. Я согласен, что он чище. Но я все еще не уверен, что он делает код более удобочитаемым. –

+0

Я думаю, в этом случае ни один из этих вариантов использования лямбда не делает код более читаемым ... – Holger

0

В соответствии с этим вопросом Valid usage of Optional type in Java 8 Дополнительный вариант здесь не является хорошим выбором, хотя технически это возможно.

Вы можете переписать с помощью StringUtils к гораздо лучше:

final String code = getCodeFromSomething(); 
if (accountType.requiresCode() && StringUtils.isEmpty(code)) { 
    new IllegalArgumentException("Account type " + accountType + " requires code"); 
} 
Смежные вопросы