在 Drools 中,选择子句(使用关键字“from”)可以写在 Iterable 或 Iterator 上吗?
In Drools, can a selection clause (using keyword `from`) be written over an Iterable or Iterator?
给定这样的 Java 界面:
class Hobby {
public String getName() {...}
}
class Person {
public Iterable<Hobby> getHobbies() {...}
}
如何在 LHS 表达式中,select 具有特定名称的爱好对象。例如,像这样:
when
$person: Person()
$hobby: Hobby(name == "Knitting") from $person.hobbies
这应该有效吗?当我们尝试时它没有产生任何结果。
考虑到 returns 一个 Iterable
而不是 Collection
的 Java 代码,是否有替代方案?
修复不匹配的 person/$person 后,如果爱好集合中有 "Knitting" 的人,则规则会编译并触发。 (5.5 版,但我相信其他版本也能正常工作。)
rule "who knits"
when
$person: Person( $name: name )
Hobby(name == "Knitting") from $person.hobbies
then
System.out.println( "Knitting: " + $name );
end
public class Person {
private String name;
private List<Hobby> hobbies = new ArrayList<Hobby>();
public String getName(){
return name;
}
public Iterable<Hobby> getHobbies(){
return hobbies;
}
}
此外,我在您发布的片段中没有看到任何 Java 接口,只有两个 类.
如果您遇到问题,请务必提供完整的代码来重现该示例。
给定这样的 Java 界面:
class Hobby {
public String getName() {...}
}
class Person {
public Iterable<Hobby> getHobbies() {...}
}
如何在 LHS 表达式中,select 具有特定名称的爱好对象。例如,像这样:
when
$person: Person()
$hobby: Hobby(name == "Knitting") from $person.hobbies
这应该有效吗?当我们尝试时它没有产生任何结果。
考虑到 returns 一个 Iterable
而不是 Collection
的 Java 代码,是否有替代方案?
修复不匹配的 person/$person 后,如果爱好集合中有 "Knitting" 的人,则规则会编译并触发。 (5.5 版,但我相信其他版本也能正常工作。)
rule "who knits"
when
$person: Person( $name: name )
Hobby(name == "Knitting") from $person.hobbies
then
System.out.println( "Knitting: " + $name );
end
public class Person {
private String name;
private List<Hobby> hobbies = new ArrayList<Hobby>();
public String getName(){
return name;
}
public Iterable<Hobby> getHobbies(){
return hobbies;
}
}
此外,我在您发布的片段中没有看到任何 Java 接口,只有两个 类.
如果您遇到问题,请务必提供完整的代码来重现该示例。