lambda表达式中的返回类型错误:谓词<T>无法转换为Criteria <T>

Bud*_*dzu 2 java java-8 java-stream

我有以下接口和类:

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

AbstractRule类包含一组Criteria.我想通过评估每个标准来对规则进行评估.我在标题中提到的c1.evaluate().和(c2.evaluate())上遇到了编译错误.

我该如何解决这个问题?

谢谢.

hol*_*ava 6

这个怎么样?你应该把a Criteria变成Predicate第一个.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)