Как исправить «неожиданное возвращаемое значение» при использовании лямбды? - PullRequest
1 голос
/ 12 апреля 2019

Когда я хочу использовать лямбду для вызова метода в другом Service.java, а затем использовать его как условие для определения возвращаемого значения.В лямбде всегда говорилось «неожиданное возвращаемое значение».Как я могу вернуть его?

  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 Ответ

1 голос
/ 12 апреля 2019

Функция Optional.ifPresent принимает потребителя, которому вообще не разрешено возвращать значение. Лямбда, переданная в ifPresent, должна иметь void тип возврата.

Вероятно, вам лучше не использовать лямбду для этой части, а вместо этого писать if (l.isPresent()) { ... }.

Если вы настаиваете на использовании функционального стиля, вы можете написать l -> l.filter(m -> m.getName().equals("name")).map(l -> SortOrder.C).orElse(sort).

...