首页 > 解决方案 > 使用 lambda 时如何修复“意外的返回值”?

问题描述

当我想使用 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;
  }

标签: javalambdareturn

解决方案


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

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

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


推荐阅读