2

我必须将选项转换为可选,并为此创建了代码,但我相信不使用私有方法可能会更短。

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();
}
4

2 回答 2

4

你应该使用Optional.map()方法:

如果存在值,则对其应用提供的映射函数,如果结果为非 null,则返回描述结果的 Optional。否则返回一个空的 Optional。

Optional<Long> optionalLong  = Optional.ofNullable(createdOrder.acceptedTime());
Optional<Instant> optionalInstant = optionalLong.map(Instant::ofEpochMilli);
于 2019-11-05T21:20:07.010 回答
1

.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));
    }
}
于 2019-11-05T21:20:59.220 回答