Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现类似场景的规则的理想数据结构是什么?_Java_Algorithm_Data Structures - Fatal编程技术网

Java 实现类似场景的规则的理想数据结构是什么?

Java 实现类似场景的规则的理想数据结构是什么?,java,algorithm,data-structures,Java,Algorithm,Data Structures,考虑以下场景,其中由ID定义的规则需要满足所有条件 RULES ID Attribute1 Operator1 Value1 Attribute2 Operator2 Value1 ... And so on ------------------------------------------------------------------- 1 x = 10 a IN 5,10 2

考虑以下场景,其中由ID定义的规则需要满足所有条件

RULES ID Attribute1 Operator1 Value1 Attribute2 Operator2 Value1 ... And so on ------------------------------------------------------------------- 1 x = 10 a IN 5,10 2 x = 20 a IN 10,15 3 x = 20 a IN 25,20 那么ID应该是

1 1 3

附言:不是作业;只是一些研究。

我认为您可以使用SmartParam库()。它是为此类评估而设计的,非常通用,因此即使与属性文件以及数据库一起使用,也可以使用它

我认为您可以使用SmartParam库()。它是为此类评估而设计的,非常通用,因此即使与属性文件以及数据库一起使用,也可以使用它

我认为您可以使用SmartParam库()。它是为此类评估而设计的,非常通用,因此即使与属性文件以及数据库一起使用,也可以使用它

我认为您可以使用SmartParam库()。它是为此类评估而设计的,非常通用,因此即使与属性文件以及数据库一起使用,也可以使用它

您是否看过drools之类的规则引擎?比你在这里做的要灵活得多,虽然不一定能解决所有问题。@Taylor是的,但不是很深入。我认为这是一个简单的用例&不要让引擎变得复杂。我很想看到这个用例可以用Drools直接实现。你似乎有一个简单的解释器算法,你可以把它复杂化,但本质是存在的。你的问题/限制是什么?你研究过逻辑编程吗?这是java不擅长的事情,但您的解决方案可以很好地做到这一点。您看过drools这样的规则引擎吗?比你在这里做的要灵活得多,虽然不一定能解决所有问题。@Taylor是的,但不是很深入。我认为这是一个简单的用例&不要让引擎变得复杂。我很想看到这个用例可以用Drools直接实现。你似乎有一个简单的解释器算法,你可以把它复杂化,但本质是存在的。你的问题/限制是什么?你研究过逻辑编程吗?这是java不擅长的事情,但您的解决方案可以很好地做到这一点。您看过drools这样的规则引擎吗?比你在这里做的要灵活得多,虽然不一定能解决所有问题。@Taylor是的,但不是很深入。我认为这是一个简单的用例&不要让引擎变得复杂。我很想看到这个用例可以用Drools直接实现。你似乎有一个简单的解释器算法,你可以把它复杂化,但本质是存在的。你的问题/限制是什么?你研究过逻辑编程吗?这是java不擅长的事情,但您的解决方案可以很好地做到这一点。您看过drools这样的规则引擎吗?比你在这里做的要灵活得多,虽然不一定能解决所有问题。@Taylor是的,但不是很深入。我认为这是一个简单的用例&不要让引擎变得复杂。我很想看到这个用例可以用Drools直接实现。你似乎有一个简单的解释器算法,你可以把它复杂化,但本质是存在的。你的问题/限制是什么?你研究过逻辑编程吗?这是java不擅长的事情,但您的解决方案可以足够好。+1谢谢@JakubK&值得一看。但它看起来是一个单一的贡献者项目;你知道这个项目有一个活跃的社区吗?@gsndev我几周前去过我当地的JG,有2-3个人参与这个项目,还有2家相当大的公司在生产中使用它。+1谢谢@JakubK&值得一看。但它看起来是一个单一的贡献者项目;你知道这个项目有一个活跃的社区吗?@gsndev我几周前去过我当地的JG,有2-3个人参与这个项目,还有2家相当大的公司在生产中使用它。+1谢谢@JakubK&值得一看。但它看起来是一个单一的贡献者项目;你知道这个项目有一个活跃的社区吗?@gsndev我几周前去过我当地的JG,有2-3个人参与这个项目,还有2家相当大的公司在生产中使用它。+1谢谢@JakubK&值得一看。但它看起来是一个单一的贡献者项目;你知道这个项目有一个活跃的社区吗?@gsndev我几周前去过我当地的酒吧,有2-3个人参与这个项目,还有2家相当大的公司在生产中使用它。 1 1 3
public boolean executeRules(List<Criterion> list,
        Map<String, String> dataItem) {
    boolean fullMatch = true;
    if(CollectionUtils.isNotEmpty(list)){
        for(Criterion rule : list) {
            switch (rule.getOperator()) {
            case EQUAL_TO: //Similar to EQUAL TO
                if(!rule.getValue().equals(dataItem.get(rule.getOperand()))){
                    fullMatch = false;
                }
                break;
            case IN://Similar to IN
                List<String> inCriteria = null;
                if(rule.getValue() != null) {
                    inCriteria = Arrays.asList(((String) rule.getValue()).split("\\s*,\\s*"));
                    if(!inCriteria.contains(dataItem.get(rule.getOperand()))){
                        fullMatch = false;
                    }
                } else {
                    fullMatch = false;
                }
                break;


            default:
                LOG.error("Invalid Operator: " + rule.getOperator());
                fullMatch = false;
                break;
            }
            if(!fullMatch) {
                return false;
            }

        }   
    } else {
        LOG.error("No Rules found");
        return false;
    }

    return true;
}