Optaplanner 缺少无参数#countDistinct 方法重载

Optaplanner missing a no-args #countDistinct method overload

我刚开始使用 Optaplanner,并尝试从文档 (https://docs.optaplanner.org/7.37.0.Final/optaplanner-docs/html_single/index.html#_collecting_countdistinct) 中重新创建以下示例:

private Constraint roomCount(ConstraintFactory factory) {
    return factory.from(Talk.class)
            .groupBy(Talk::getRoom, countDistinct())
            .penalize("roomCount",
                    HardSoftScore.ONE_SOFT,
                    (room, count) -> ...);
}

... 但是 ConstraintCollectors class 中没有无参数 #countDistinct() 方法重载。 只有方法重载分别接受 Function/BiFunction/TriFunction/QuadFunction

我是否导入了错误的 class,或者是否存在未记录的签名更改?

好消息,这看起来像是文档中的一个疏忽。你想做的事情是最容易实现的:

.groupBy(Talk::getRoom, countDistinct(Function.identity()))

可以将无参数重载添加到 API,这是我刚才展示的语法糖。有时间我会look into it

Wrt。您关于未记录的签名更改的问题 - 不,那不会发生。 API 在 OptaPlanner 的主要版本之间保持严格的向后兼容——我们实际上在构建时使用 Revapi 来为我们强制执行。您所指出的很可能只是文档审查过程中的疏忽。

感谢您花时间指出这一点。