Java 后端实现前端规则的运算和比较

1. 前端JSON数据

{
    "conditions": [
        {
            "field": "age",
            "operator": ">",
            "value": 18
        },
        {
            "field": "status",
            "operator": "==",
            "value": "active"
        }
    ],
    "logicalOperator": "AND"
}
2. 定义 Java 类

创建 Java 类来表示这些规则。

import java.util.List;

public class RuleConfig {
    private List<Condition> conditions;
    private String logicalOperator; // "AND" 或 "OR"

    // Getters and Setters

    public static class Condition {
        private String field;
        private String operator; // 比如 ">", "==", "<="
        private Object value;

        // Getters and Setters
    }
}
3. 实现规则引擎

实现一个规则引擎来处理这些规则。以下是一个简单示例

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RuleEngine {

    public boolean evaluate(RuleConfig ruleConfig, Map<String, Object> data) {
        
        // 执行结果
        boolean result = true;
        for (RuleConfig.Condition condition : ruleConfig.getConditions()) {
            boolean conditionResult = executeCondition(condition, data);
            if (ruleConfig.getLogicalOperator().equalsIgnoreCase("AND")) {
                if (!conditionResult) {
                    return false;
                }
            } else if (ruleConfig.getLogicalOperator().equalsIgnoreCase("OR")) {
                if (conditionResult) {
                    return true;
                }
            }
        }
        return result;
    }

    private boolean executeCondition(RuleConfig.Condition condition, Map<String, Object> data) {
        Object fieldValue = data.get(condition.getField());
        if (fieldValue == null) {
            return false;
        }

        switch (condition.getOperator()) {
            case "==":
                return fieldValue.equals(condition.getValue());
            case ">":
                if (fieldValue instanceof Comparable) {
                    return ((Comparable) fieldValue).compareTo(condition.getValue()) > 0;
                }
                break;
            case "<":
                if (fieldValue instanceof Comparable) {
                    return ((Comparable) fieldValue).compareTo(condition.getValue()) < 0;
                }
                break;
            // 添加更多的运算符支持
        }

        return false;
    }
}

4. 使用示例

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        String jsonRule = "{ \"conditionList\": [{\"field\": \"age\", \"operator\": \">\", \"value\": 18}, {\"field\": \"status\", \"operator\": \"=\", \"value\": \"active\"}], \"logicalOperator\": \"AND\" }";
        RuleConfigVO ruleConfig = JSON.parseObject(jsonRule, RuleConfigVO.class);

        Map<String, Object> data = new HashMap<>();
        data.put("age", 20);
        data.put("status", "active");

        RuleEngineService ruleEngine = new RuleEngineServiceImpl();
        boolean result = ruleEngine.execute(ruleConfig, data);

        System.out.println("Rule execute result: " + result); // 应该输出 true
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值