【问题标题】:Java Optional: flatmap and orElseGet [duplicate]Java 可选:flatmap 和 orElseGet [重复]
【发布时间】:2019-02-01 12:57:00
【问题描述】:

我已经编码了:

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

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

所以,我收到了这条编译消息:

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

有什么想法吗?

【问题讨论】:

  • 我觉得你得打电话给.orElseGet(() -> this.referenceService.get(id))

标签: java java-stream


【解决方案1】:

从java 9开始你可以使用Optional.or()

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

【讨论】:

    【解决方案2】:

    如果您使用的是 Java 9,则可以访问 Optional.or,它接受 Supplier&lt;Optional&lt;T&gt;&gt;

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多