当前位置: 首页 > 知识库问答 >
问题:

lambda表达式中的返回类型错误:谓词不能转换为条件

於乐语
2023-03-14

我有以下接口和类:

public interface Rule<T> {
   Predicate<T> evaluate();
}

public interface Criteria<T> {
   Predicate<T> evaluate();
}

public abstract class AbstractRule<T> implements Rule<T> {
   ...
   Set<Criteria<T>> criteria;
   ...

   @Override 
   @Nullable 
   public Predicate<T> evaluate() {
      return criteria.stream().reduce((c1, c2) -> c1.evaluate().and(c2.evaluvate()))
             .orElse(null);
   }
}

抽象规则类包含一组标准。我想通过评估每个标准来评估规则。我在标题中提到的c1.evaluate().和(c2.evaluate())上有编译错误。

我应该如何解决这个问题?

谢谢。

共有1个答案

邵俊才
2023-03-14

这个怎么样?您应该首先将标准转换为谓词。

abstract class AbstractRule<T> implements Rule<T> {
    Set<Criteria<T>> criteria;

    @Override
    @Nullable
    public Predicate<T> evaluate() {
        return criteria.stream().map(Criteria::evaluate)
                                .reduce(Predicate::and)
                                .orElse(null);
    }
}
 类似资料: