Java Spring Boot(STS)中无法识别ConstraintCollector

Java Spring Boot(STS)中无法识别ConstraintCollector,java,spring-boot,optaplanner,Java,Spring Boot,Optaplanner,我正在尝试使用Optaplanner constraintprovider,它可以正常工作,直到我想使用count()ConstraintCollector 我试图在groupBy-子句中使用它,但得到了错误:方法count()对于类型hamxConstraintProvider是未定义的 我认为这应该“起作用”?还是我应该写自己的计数方法?我在示例中找不到这种情况,但似乎也无法解决。我是否忽略了一个重要因素 import org.optaplanner.core.api.score.strea

我正在尝试使用Optaplanner constraintprovider,它可以正常工作,直到我想使用
count()
ConstraintCollector

我试图在
groupBy
-子句中使用它,但得到了错误:
方法count()对于类型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);
    }

count()
countLong()
是ConstraintCollector的方法。如果它已编译但未运行,则可能没有向SolverConfig提供Spring的类加载器

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

,而不是

import org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import org.optaplanner.core.api.score.stream.Joiners.*;
使用静态导入:


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

您使用的是哪个版本的OptaPlanner?它是否编译?要平衡作业,您必须惩罚
count*count
(因此count²),请参阅文档“公平性”部分。仅使用
count
将不会产生任何影响。它不会编译,STS ide会立即将其作为错误发出信号。我正在使用Optaplanner 7.30.0。最终的count²提示银行,还没走到那一步,但帮了我一个头疼的问题:-)添加
约束收集器。
成功了,但是,
count*count
仍被标记为错误(
无法解析为变量
),并且程序运行时不会崩溃;分数不受影响。或者看起来是这样。。。顺便说一下,爪哇11点。哇,谢谢!这帮了大忙:不知道静态导入!修复了第1部分(count()),但count*count仍然是一个问题。我是否遗漏了什么,是否必须在某个地方声明并分配计数?奇怪的是,它会编译,但不会对分数产生影响可能是计划解决方案上的空列表或遗漏的ProblemFactCollectionProperty注释
import static org.optaplanner.core.api.score.stream.ConstraintCollectors.*;
import static org.optaplanner.core.api.score.stream.Joiners.*;