我必须将Option转换为Optional,并为此创建了代码,但我认为不使用private方法的时间可能更短。
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();
}
答案 0 :(得分:4)
您应该使用Optional.map()
方法:
如果存在值,则将提供的映射函数应用于该值,如果结果为非null,则返回描述结果的Optional。否则,返回一个空的Optional。
Optional<Long> optionalLong = Optional.ofNullable(createdOrder.acceptedTime());
Optional<Instant> optionalInstant = optionalLong.map(Instant::ofEpochMilli);
答案 1 :(得分: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));
}
}