Drools 规则检查具有复合值限制的集合

发布于 2024-10-09 18:45:33 字数 321 浏览 8 评论 0原文

我想检查一个集合是否包含三个元素。在java中我会做

!(collection.contains("s1") && collection.contains("s2") && collection.contains("s3"))

How can I do this with drools?我搜索了两个小时并尝试了任何方法,但找不到这个“简单”问题的解决方案。我发现“复合值限制”正是我所需要的,但它不适用于集合和“包含”运算符。

我将不胜感激您的回答。

拿但业

I want to check if a collection contains not three elements. In java I would do

!(collection.contains("s1") && collection.contains("s2") && collection.contains("s3"))

How can I do this with drools? I searched for two hours and tried anything but can't find a solution for this "simple" problem. I found the "Compound Value Restriction" which is what I exactly need, but it does not work for collections and the "contains" operator.

I would appreciate your answers.

Nathanael

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最后的乘客 2024-10-16 18:45:33

这执行了 Java 代码的操作:

Collection( this not contains "s1" ||
            this not contains "s2" ||
            this not contains "s3")

This does what the Java code does:

Collection( this not contains "s1" ||
            this not contains "s2" ||
            this not contains "s3")
流心雨 2024-10-16 18:45:33

我认为,你可以采用规则方言“java”。
以下示例可以帮助您。

global java.util.ArrayList responseList

rule "checkCollectionRule"
    dialect "java"
    salience -1

    when

        eval(ifContains(responseList, val1, val2.....))

    then

        responseList.add(new Boolean("true"));

end


function Boolean ifContains(List responseList, String val1, String val2,....) {
    return (responseList.contains("s1") && responseList.contains("s2") && responseList.contains("s3"));

}

希望这有帮助。
谢谢。

I think, You can take rule dialect "java".
Following sample can help you.

global java.util.ArrayList responseList

rule "checkCollectionRule"
    dialect "java"
    salience -1

    when

        eval(ifContains(responseList, val1, val2.....))

    then

        responseList.add(new Boolean("true"));

end


function Boolean ifContains(List responseList, String val1, String val2,....) {
    return (responseList.contains("s1") && responseList.contains("s2") && responseList.contains("s3"));

}

Hope this help.
Thanks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文