Java可选:flatmap和orElseGet

时间:2019-02-01 12:57:00

标签: java java-stream

我已将其编码为:

Optional.ofNullable(this.cache.get(id))
    .orElseGet(this.referenceService.get(id));

问题是this.referenceService.get返回一个Optional

所以,我收到以下编译消息:

  

类型为orElseGet(Supplier<? extends Reference>)的方法Optional<Reference>不适用于参数(Optional<Reference>

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

从Java 9开始,您可以使用Optional.or()

Optional<String> foo = Optional.empty();
Optional<String> bar = Optional.ofNullable("Bar");
System.out.println(foo.or(() -> bar));

答案 1 :(得分:1)

如果您使用的是Java 9,则可以访问Optional.or,该接受Supplier<Optional<T>>

如果没有,则以下模式有效:

Optional.ofNullable(this.cache.get(id))
    .orElseGet(() -> this.referenceService.get(id)
        .orElseThrow(()-> new RuntimeException("Expected service to return something")));