java 如何让口水查询“兄弟姐妹”

zdwk9cvp  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(142)

我有一个Java类,包含以下字段:

Public class Parent {
    @Position(0)
    private String parent;
    @Position(1)
    private String child;
 }

然后,这里有一些格式的对象:

kSession.insert(new Parent("adam", "peter"));
kSession.insert(new Parent("adam", "john"));

如何使查询“兄弟姐妹”在流口水,格式兄弟姐妹(字符串x,字符串y)和打印输出像“彼得,约翰”?

7eumitmz

7eumitmz1#

假设你想对每个父节点(名字),* 查询 * 在工作内存中拥有该父节点的兄弟节点,你可以通过以下方式实现:

query siblings
    accumulate(
        Parent( $p : parent ); $parents: collectSet($p)
    )
    $pName: String() from $parents
    accumulate(
        Parent( parent == $pName, $c: child ); $siblings: collectSet($c)
    )
end

片段:

session.insert(new Parent("adam", "peter"));
session.insert(new Parent("adam", "john"));

QueryResults qr = session.getQueryResults("siblings");

for (QueryResultsRow queryResultsRow : qr) {
    System.out.println(queryResultsRow.get("$siblings"));
}

会打印出:

[peter, john]

它将为其他父节点添加额外的sysout行(这里没有演示)。
证明:https://github.com/tarilabs/demo20230401-so75906526/blob/3f9b08c9cc781a37376c1164d65f5144185cd9ed/src/test/java/org/drools/demo/RuleTest.java#L43-L46

相关问题