【问题标题】:How to fix "unexpected return value" when using lambda?使用 lambda 时如何修复“意外的返回值”?
【发布时间】:2019-09-02 17:13:32
【问题描述】:

当我想使用 lambda 调用另一个 Service.java 中的方法,然后将其用作决定返回值的条件时。它总是在 lambda 中表示“意外的返回值”。怎么退货?

  public SortOrder transform(SortOrder sort, String  abc) {
    if (sort == null) {
      return SortOrder.A;
    } else if (sort.equals(SortOrder.B) && abc != null) {
      return AnotherService.getString(abc)
          .map(l -> l.ifPresent(m -> {
            if (m.getName().equals("name")) {
              return SortOrder.C; //ERROR: unexpected return value
            }
            return sort; //ERROR: unexpected return value
          }));
    } else {
      return sort;
    }
    return sort;
  }

【问题讨论】:

  • AnotherService.getString(abc)的返回类型是什么?
  • @Naman AnotherService.getString 将返回一个任务>

标签: java lambda return


【解决方案1】:

函数Optional.ifPresent 接受一个消费者,它根本不允许返回一个值。传递给 ifPresent 的 lambda 必须具有 void 返回类型。

您最好不要为该部分使用 lambda,而是编写 if (l.isPresent()) { ... }

如果你坚持使用函数式风格,你可以写l -> l.filter(m -> m.getName().equals("name")).map(l -> SortOrder.C).orElse(sort)

【讨论】:

  • 我猜推论的问题是你如何获得返回的包装对象? if (l.isPresent()) { return l.getObj()? }
  • @end-user 是的,除了l.get()
猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2020-06-24
  • 2017-05-02
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多