使用lambda时如何解决“意外的返回值”?

时间:2019-04-12 01:12:58

标签: java lambda return

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

1 个答案:

答案 0 :(得分:1)

函数Optional.ifPresent接受使用者,根本不允许其返回值。传递给ifPresent的lambda必须具有void返回类型。

最好不要为此部分使用lambda,而应写if (l.isPresent()) { ... }

如果您坚持使用功能样式,则可以编写l -> l.filter(m -> m.getName().equals("name")).map(l -> SortOrder.C).orElse(sort)