You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不依赖groupBy()使用约束流收集器实现全局实体字段求和约束?

用OptaPlanner约束流实现全局字段求和约束

要实现对所有MeaningOfLife实例的字段总和约束,你可以利用约束流的groupBy方法结合聚合收集器,即使不需要分组也能完成全局求和。核心是使用无分组键的groupBy搭配对应类型的求和收集器来实现全局聚合。

正确的约束流实现代码如下:

constraintFactory
    .forEach(MeaningOfLife.class)
    .groupBy(Sum.ofInt(MeaningOfLife::getValue)) // 对所有实例的value字段求和
    .penalize(HardSoftScore.ONE_SOFT, totalMeaning -> totalMeaning != 42 ? 1 : 0)
    .asConstraint("Meaning of life is always 42");

关键说明:

  • groupBy(Sum.ofInt(MeaningOfLife::getValue)):省略分组键参数后,会将所有MeaningOfLife实例作为一个全局组,通过Sum.ofInt收集器计算value字段的总和。
  • penalize方法中,通过Lambda判断总和是否不等于42:返回1表示罚1个软分数,返回0则不罚分。

这种写法完全符合OptaPlanner约束流的推荐用法,可以替代临时的EasyScoreCalculator方案。

内容的提问来源于stack exchange,提问作者Erich Oliphant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:23:17