java - lambda 表达式中的错误返回类型 : Predicate<T> cannot be converted to Criteria<T>

标签 java java-8 java-stream

我有以下接口(interface)和类:

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().and(c2.evaluate()) 上遇到编译错误。

我该如何解决这个问题?

谢谢。

最佳答案

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

关于java - lambda 表达式中的错误返回类型 : Predicate<T> cannot be converted to Criteria<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45019066/

相关文章:

java - 使用 java 8 Streams 对项目列表进行分组,并使用第一个项目而不是列表填充生成的 map

java - 引用声明接口(interface)时方法引用无效

java - 简化 if 语句

java - 将多行写入 java 中的新文件?

java - Maven 不知道我的内部项目

java - 方法引用中的类型推断

java - 我的代码中线程 "Thread-2"java.lang.NullPointerException.error 中出现异常

java - "Code as Data"是什么意思?

functional-programming - 用于通过字段列表检索 map 内部的 java8 流样式?

Java Stream 与 JPA 一对多(LAZY)关系不起作用