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

时间:2017-07-10 18:15:05

标签: 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);
   }
}

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

我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:6)

这个怎么样?您应首先将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);
    }
}