Как сопоставить необязательную длину с необязательным & lt; Long & gt ;?

В моем коде у меня есть OptionalLong. Но для одной из моих библиотек требуется параметр Optional<Long>. Как я могу его преобразовать?

Мне снилось что-то вроде этого:

OptionalLong secondScreenHeight = OptionalLong.of(32l);
api.setHeight(secondScreenHeight.maptoUsualOptional()); // .maptoUsualOptional does not exist
1
задан 13 August 2018 в 16:11

3 ответа

Вы можете сделать это:

final OptionalLong optionalLong = OptionalLong.of(5);

final Optional<Long> optional = Optional.of(optionalLong)
            .filter(OptionalLong::isPresent)
            .map(OptionalLong::getAsLong);
8
ответ дан 15 August 2018 в 16:58
  • 1
    как! это то, с чем я бы – Eugene 13 August 2018 в 16:27
  • 2
    Что мне нравится в этом решении, так это то, что начальная переменная используется только один раз. Это позволяет создавать «длинные цепи», в моем коде - я не обязательно сохраняю значение в переменной. – slartidan 13 August 2018 в 16:35
  • 3
    Мне нравится, что он не использует старый синтаксис if else, но только блестящий новый синтаксис java-8! – slartidan 13 August 2018 в 16:36
  • 4
    @slartidan хорошо, все еще if/else внутри фильтра и карты, хотя – Eugene 13 August 2018 в 16:37

Я не знаю более простых решений, но это сделает то, что вам нужно.

OptionalLong secondScreenHeight = OptionalLong.of(32l);
Optional<Long> optional = secondScreenHeight.isPresent() 
    ? Optional.of(secondSceenHeight.getAsLong()) 
    : Optional.empty();
api.setHeight(optional);
3
ответ дан 15 August 2018 в 16:58
  • 1
    Мне нравится об этом решении, что оно читаемо и что намерение переназначить опционально четко видно. – slartidan 13 August 2018 в 17:17

Это должно сработать.

Optional<Long> returnValue = Optional.empty();
if(secondScreenHeight.isPresent()) {
      returnValue = Optional.of(secondScreenHeight.getAsLong());
}
1
ответ дан 15 August 2018 в 16:58

Другие вопросы по тегам:

Похожие вопросы: