在 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 接口,只有两个 类.

如果您遇到问题,请务必提供完整的代码来重现该示例。