在 Spring Boot (STS) 中无法识别约束收集器



我正在尝试使用 Optaplanner 约束提供程序,它工作正常,直到我想使用count()ConstraintCollector。

我尝试在groupBy-子句中使用它,但出现错误:The method count() is undefined for the type hamxConstraintProvider我假设这应该"正常工作"?还是我应该编写自己的计数方法?我在示例中找不到这种情况,但似乎也无法解决它。我是否忽略了进口?

import org.optaplanner.core.api.score.stream.Constraint;
import org.optaplanner.core.api.score.stream.ConstraintFactory;
import org.optaplanner.core.api.score.stream.ConstraintProvider;
import org.optaplanner.core.api.score.stream.uni.UniConstraintCollector;
import org.optaplanner.core.api.score.stream.bi.BiConstraintCollector;
import org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import org.optaplanner.core.api.score.stream.Joiners.*;
...
public class hamxConstraintProvider implements ConstraintProvider{

@Override
public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
return new Constraint[] {
skillUnavailable(constraintFactory),
balancedJobs(constraintFactory)
};
}

...
private Constraint balancedJobs(ConstraintFactory factory) {
return factory.from(Job.class)
.groupBy(Job::getEmployee,count())
.penalize("unbalancedEmployeeUsage", HardSoftScore.ONE_SOFT,count);
}

而不是

import org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import org.optaplanner.core.api.score.stream.Joiners.*;

使用静态导入:

import static org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import static org.optaplanner.core.api.score.stream.Joiners.*;

前者导入类,后者导入静态方法。

count()countLong()是ConstraintCollectors的方法。如果它编译但没有运行,你可能没有向SolverConfig提供Spring的ClassLoader。

在下一个版本 7.32 中,我们将发布 optaplanner-spring-boot-starter,这将使 Spring Boot 集成变得更加容易(它只是自动注入一个SolverManager(或SolverFactory,但前者是后者在 steriods 上(

最新更新