Необязательно <Long>до Необязательно <Instant> - PullRequest
2 голосов
/ 06 ноября 2019

Мне нужно преобразовать Option в Optional и создать код для этого, но я считаю, что это может быть еще короче, если приватный метод не используется.

Optional<Long> optionalLong  ;
 Optional<Instant> optionalInstant;


assertThat(createdOrder.acceptedTime, is( OptionalLongToOptionalInstant(expectedOrder.acceptedTime())));


private Optional<Instant> OptionalLongToOptionalInstant(Optional<Long> optionalLong ) {
    if(optionalLong.isPresent()){
        return   Optional.of(Instant.ofEpochMilli(optionalLong.get()));
    }
    return Optional.empty();
}

Ответы [ 2 ]

4 голосов
/ 06 ноября 2019

Вы должны использовать Optional.map() метод:

Если значение присутствует, примените к нему предоставленную функцию отображения, и если результат не равен нулю, вернитеНеобязательное описание результата. В противном случае вернуть пустой Необязательно.

Optional<Long> optionalLong  = Optional.ofNullable(createdOrder.acceptedTime());
Optional<Instant> optionalInstant = optionalLong.map(Instant::ofEpochMilli);
1 голос
/ 06 ноября 2019

Метод .map() - это то, что вам нужно

assertThat(createdOrder.acceptedTime, is(expectedOrder.acceptedTime().map(Instant::ofEpochMilli)));

Исходный код, он проверяет isPresent():

public <U> Optional<U> map(Function<? super T, ? extends U> mapper) {
    Objects.requireNonNull(mapper);
    if (!isPresent()) {
        return empty();
    } else {
        return Optional.ofNullable(mapper.apply(value));
    }
}
...