gpt4 book ai didi

drools - 比较 Drool 5.5 中的字符串值字段

转载 作者:行者123 更新时间:2023-12-04 00:43:05 30 4
gpt4 key购买 nike

在使用 Drools 5.5 final 比较字符串值字段时,我遇到了一些令人费解的问题。

本质上,我试图找出是否有一对同名的人。 Person 类如下所示:

public class Person {
private String name;

public String getName() { return name; }
public void setName(String n) { this.name = n; }
public Person(String name) { this.name = name;}
}

我尝试触发的规则是:

rule "uniquePersonName"
when
$p1: Person($n1: name)
$p2: Person(this != $p1, name == $n1)
then
System.out.println("Duplicated person name found : " + $n1 + " " + $p2.getName());
end

但它从未被触发。但是,如果我将其更改为:

when
$p1: Person($n1: name)
$p2: Person(this != $p1, name != $n1)

系统按预期工作,换句话说,它找到了所有姓名不同的人对。

深入挖掘后,我发现如果我将名称字段更改为 Integer 类型,则原始规则可以正常工作。这让我认为这是因为字符串比较的一些错误。因此,将 name 字段定义为 String 类型,我尝试了:

  1. 不是 (name == $n1)
  2. (名字== $n1)
  3. name.toString() = $n1.toString()
  4. name == $p1.getName()

不幸的是,它们都不起作用。

最后,我能让它正常运行的唯一方法是将规则写成:

when
$p1: Person($n1: name)
$p2: Person(name == $n1)
eval($p1!=$p2)

这让我觉得问题可能是由 this 的工作方式和字符串比较的完成方式共同引起的。

这是非常基本的功能,我很惊讶这是由 Drools 5.5 final 中的错误引起的。但同样,我看不到出路。你们能帮忙吗?

谢谢。

毛重

最佳答案

事实证明,this != $p1 转换为 !this.equals($p1),在我的代码中,我有一个自动生成的 equals 方法(原始帖子中未显示代码),这完全改变了默认的比较行为。删除 equals 方法后,一切都按预期工作。

关于drools - 比较 Drool 5.5 中的字符串值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782397/

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