gpt4 book ai didi

optaplanner - 为什么 Joiners 类中没有 'notEqual' 方法?

转载 作者:行者123 更新时间:2023-12-05 06:03:16 26 4
gpt4 key购买 nike

我正在使用 Joiners 类来创建约束。 Joiners 类有 equal()、greaterThan()、lessThanOrEqual() 等方法。我想使用“notEqual()”等方法,因为我想比较同一类的两个对象,如果属性(property)的值(value)是不一样的。请注意,我使用 Joiners.lessThan(..id..) 来确保我比较对象对而无需执行两次。这是我希望能够编写的代码示例:

private Constraint someConflict(ConstraintFactory cf) {
return cf.from(A.class)
.join(A.class, // Pair the above A with this A
Joiners.notEqual(A::getSomething), // ..if they have differing Something
Joiners.lessThan(A::getId)) // ..and if the pair is unique (no reverse pairs)
.penalizeConfigurable();
}

“notEqual”显然会失败,因为它不存在。有没有办法做到这一点?这种操作应该是可能的,这似乎是合乎逻辑的。如果没有,我可以开悟吗?提前致谢。

最佳答案

好问题!

Joiners 方法 equal()greaterThan()lessThanOrEqual() 等使用索引(=哈希表)。这意味着它们对于大型数据集比没有这样的索引要快得多。请参阅下面的 2 张图片。 (这独立于评分的“增量”方面。)

我们还不确定为 notEquals() 使用索引是否是个好主意。同时,我们要保证所有 Joiners 方法都使用索引,过滤 除外。所以如果它没有被索引,就没有 notEquals(Bar::getFoo)。现在 filtering((a, b) -> !a.getFoo().equals(b.getFoo())) 有效。也许我们应该添加 notEqualsFiltering(Bar::getFoo) 作为语法糖?

slow

enter image description here

关于optaplanner - 为什么 Joiners 类中没有 'notEqual' 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66694899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com