2016-02-04 5 views
1

Как я могу сделать один код, который либо установит тип BYTES, либо SECONDS. Здесь я устанавливаю по умолчанию BYTES перед тем overwritting его SECONDS с вызовом в setTypeAsSecondsIfCcTimeIsValid функцииНеобязательный IfPresent и альтернативный вариант

} else if (mscc.getRsu().isPresent()) { 
     type = Type.BYTES; 
     mscc.getRsu().get().getCcTime().ifPresent(this::setTypeAsSecondsIfCcTimeIsValid); 
    } 

ответ

3

Что-то, как это должно работать:

type = mscc.getRsu().flatMap(rsu -> rsu.getCcTime()) 
        .filter(ccTime -> isCcTimeValid(ccTime)) 
        .map(ccTime -> Type.BYTES).orElse(Type.SECONDS); 

Однако я хотел бы использовать тройные вместо:

type = mscc.getRsu().flatMap(rsu -> rsu.getCcTime()) 
        .filter(ccTime -> isCcTimeValid(ccTime)) 
        .isPresent() ? Type.BYTES : Type.SECONDS; 

Этот код предполагает, что у вас есть метод isCcTimeValid.

+0

Спасибо, это работает. – spakai

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