自定义规则比较器
来源:互联网 发布:gson 生成json 编辑:程序博客网 时间:2024/06/11 00:35
package com.parse.utils;import com.parse.entity.ProtocolCondition;import com.parse.entity.ProtocolEntity;import com.parse.entity.ProtocolEntity;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.*;/** * Created by admin on 2017/8/22. */public class CompareCondition { /** * 传入数据:规则,被比较参数 */ private static <T> List<ProtocolCondition> comareTo(List<ProtocolCondition> conditions, T protocolEntity) { Map<String, String> map = getField(protocolEntity); List<ProtocolCondition> returnCondition = new ArrayList<ProtocolCondition>(); int i = -1; for (ProtocolCondition condition : conditions) { String variable = condition.getVariable(); String operator = condition.getOperator(); String value = condition.getValue(); String connector = condition.getConnector(); String fieldType = condition.getFieldType();//根据实验得知:判断String要比,string转换integer进行compareTo块数倍 ProtocolCondition next = condition.getNext(); for (Map.Entry<String, String> ite : map.entrySet()) { if (variable.equalsIgnoreCase(ite.getKey())) { if (operator.equals("==")) { i = value.compareTo(ite.getValue()) == 0 ? 1 : 0; if (parseConnectCondition(returnCondition, i, condition, connector)) return returnCondition; } else if (operator.equals("!=")) { i = value.compareTo(ite.getValue()) != 0 ? 1 : 0; if (parseConnectCondition(returnCondition, i, condition, connector)) return returnCondition; } else if (operator.equals(">")) { i = value.compareTo(ite.getValue()) > 0 ? 1 : 0; if (parseConnectCondition(returnCondition, i, condition, connector)) return returnCondition; } else if (operator.equals("<")) { i = value.compareTo(ite.getValue()) < 0 ? 1 : 0; if (parseConnectCondition(returnCondition, i, condition, connector)) return returnCondition; } } } } return returnCondition; } /** * 解析连接符 * @param returnCondition * @param i * @param condition * @param connector * @return */ private static boolean parseConnectCondition(List<ProtocolCondition> returnCondition, int i, ProtocolCondition condition, String connector) { if (connector.equals("|") && i == 1 || connector.equals("")) { returnCondition.add(condition); return true; } else if (connector.equals("&") && i == 1) { returnCondition.add(condition); } else if (connector.equals("&") && i == 0) { return true; } return false; } /** * 获取字段名称 * @param clazz * @param <T> * @return */ public static <T> Map<String, String> getField(T clazz) { Map<String, String> fieldMap = new HashMap<String, String>(); Field[] fields = clazz.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); try { fieldMap.put(field.getName(), (String) field.get(clazz)); } catch (IllegalAccessException e) { e.printStackTrace(); } } return fieldMap; } /** * 测试类 * @param args */ public static void main(String[] args) { ProtocolEntity p = new ProtocolEntity(); p.setDiff("ipasdf"); p.setIp("192.168.101.141"); p.setName("c"); p.setPort("8081"); ProtocolCondition protocolCondition = new ProtocolCondition(); protocolCondition.setVariable("ip"); protocolCondition.setOperator("!="); protocolCondition.setValue("192.168.101.140"); protocolCondition.setConnector("|"); ProtocolCondition next = new ProtocolCondition(); next.setVariable("port"); next.setOperator(">"); next.setValue("8080"); protocolCondition.setNext(next); List<ProtocolCondition> conditions = new ArrayList<ProtocolCondition>(); conditions.add(protocolCondition); List<ProtocolCondition> protocolConditions = comareTo(conditions, p); for (ProtocolCondition condition : protocolConditions) { System.out.println(condition); } }}package com.parse.entity;/** * Created by admin on 2017/8/21. * ip.xttl==11&ip.diffrence>1111&ip.proto>44 */public class ProtocolCondition { public String variable;//变量 public String operator;//运算符 public String value;//变量值 public String fieldType;//0标识Integer 1标识String public String connector;//连接符 public ProtocolCondition next;//连接符下一个条件 public String getVariable() { return variable; } public void setVariable(String variable) { this.variable = variable; } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getConnector() { return connector; } public void setConnector(String connector) { this.connector = connector; } public String getFieldType() { return fieldType; } public void setFieldType(String fieldType) { this.fieldType = fieldType; } public ProtocolCondition getNext() { return next; } public void setNext(ProtocolCondition next) { this.next = next; } @Override public String toString() { return "ProtocolCondition{" + "variable='" + variable + '\'' + ", operator='" + operator + '\'' + ", value='" + value + '\'' + ", fieldType='" + fieldType + '\'' + ", connector='" + connector + '\'' + ", next=" + next + '}'; }}package com.parse.entity;/** * Created by admin on 2017/8/22. */public class ProtocolEntity { private String ip; private String port; private String diff; private String name; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getDiff() { return diff; } public void setDiff(String diff) { this.diff = diff; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
阅读全文
0 0
- 自定义规则比较器
- 自定义map比较规则及函数调用
- jquery valitor 自定义版本比较规则
- c,c++,java用户自定义标识符命名规则比较
- c,c++,java用户自定义标识符命名规则比较
- 自定义比较器
- MapReduce-自定义比较器
- 自定义比较器
- Java 自定义比较器
- STL自定义比较器
- TreeSe自定义比较器
- Collections 自定义比较器 Comparator
- 简单的自定义比较器
- Java自定义比较器Comparator
- java自定义比较器Comparator
- Java数组自定义比较器
- 自定义反向比较器reverseSort
- 为容器添加比较函数,自定义容器的排序规则代码示例
- HEVC函数入门(21)——帧间预测之Merge
- SAX解析XML
- 高并发解决方案--负载均衡
- Cloudera Manager安装过程中各种坑解决方案
- 关系映射
- 自定义规则比较器
- 微信公众平台 redirect_uri参数错误解决方法
- Spring获取bean的几种方式
- ARM NEON 编程系列7——NEON gcc编译器intrinsics函数对应的汇编指令
- Multi-university 第九场 经验总结
- 排序算法C++&&Python实现---基数排序
- Spring框架学习(一)
- 网络营销实战课-微信实操
- 一个DOM操作的题目