最近做个需求,获取的值value和给定的两个阈值thresholdValue1,thresholdValue2进行比较,然后发送告警,其中value值的类型包括double,int ,String;比较符包括:">" "<"">=""<=""=""!=".
代码的难度不大,然后下面是我写的代码,大家可以略去不看...
<span style="white-space:pre"> </span>public static final int DATA_TYPE_STRING = 0; //值的类型 public static final int DATA_TYPE_INTEGER = 1; public static final int DATA_TYPE_DOUBLE = 2; public static final int DATA_TYPE_OTHER = 3;
private boolean isProduceAlarm(String defaultValue, String thresholdValue1, String thresholdValue2, String operator1, String operator2, int date_type) { boolean flag = false; // 如果操作符均为空 或者 defaultValue为空 或者 thresholdValue1为空 并且 thresholdValue2为空 if ((!StringUtil.isNullOrEmpty(operator1) && !StringUtil.isNullOrEmpty(operator2)) || (!StringUtil.isNullOrEmpty(defaultValue)) || (!StringUtil.isNullOrEmpty(thresholdValue1) && (!StringUtil.isNullOrEmpty(thresholdValue2)))) { return flag; } if (date_type == 1 || date_type == 2) { if (">".equals(operator1)) { if ("<".equals(operator2) && Double.parseDouble(defaultValue) > Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) < Double.parseDouble(thresholdValue2)) { flag = true; } else if ("<=".equals(operator2) && Double.parseDouble(defaultValue) > Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) <= Double.parseDouble(thresholdValue2)) { flag = true; } else if ("=".equals(operator2) && Double.parseDouble(defaultValue) > Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue2)) { flag = true; } else if ("!=".equals(operator2) && Double.parseDouble(defaultValue) > Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue2)) { flag = true; } else if (!StringUtil.isNullOrEmpty(operator2) && Double.parseDouble(defaultValue) > Double.parseDouble(thresholdValue1)) { flag = true; } } else if (">=".equals(operator1)) { if ("<".equals(operator2) && Double.parseDouble(defaultValue) >= Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) < Double.parseDouble(thresholdValue2)) { flag = true; } else if ("<=".equals(operator2) && Double.parseDouble(defaultValue) >= Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) <= Double.parseDouble(thresholdValue2)) { flag = true; } else if ("=".equals(operator2) && Double.parseDouble(defaultValue) >= Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue2)) { flag = true; } else if ("!=".equals(operator2) && Double.parseDouble(defaultValue) >= Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue2)) { flag = true; } else if (!StringUtil.isNullOrEmpty(operator2) && Double.parseDouble(defaultValue) >= Double.parseDouble(thresholdValue1)) { flag = true; } } else if ("=".equals(operator1)) { if ("<".equals(operator2) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) < Double.parseDouble(thresholdValue2)) { flag = true; } else if ("<=".equals(operator2) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) <= Double.parseDouble(thresholdValue2)) { flag = true; } else if ("=".equals(operator2) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue2)) { flag = true; } else if ("!=".equals(operator2) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue2)) { flag = true; } else if (!StringUtil.isNullOrEmpty(operator2) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue1)) { flag = true; } } else if ("!=".equals(operator1)) { if ("<".equals(operator2) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) < Double.parseDouble(thresholdValue2)) { flag = true; } else if ("<=".equals(operator2) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) <= Double.parseDouble(thresholdValue2)) { flag = true; } else if ("=".equals(operator2) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue2)) { flag = true; } else if ("!=".equals(operator2) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue1) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue2)) { flag = true; } else if (!StringUtil.isNullOrEmpty(operator2) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue1)) { flag = true; } } else if (!StringUtil.isNullOrEmpty(operator1)) { if ("<".equals(operator2) && Double.parseDouble(defaultValue) < Double.parseDouble(thresholdValue2)) { flag = true; } else if ("<=".equals(operator2) && Double.parseDouble(defaultValue) <= Double.parseDouble(thresholdValue2)) { flag = true; } else if ("=".equals(operator2) && Double.parseDouble(defaultValue) == Double.parseDouble(thresholdValue2)) { flag = true; } else if ("!=".equals(operator2) && Double.parseDouble(defaultValue) != Double.parseDouble(thresholdValue2)) { flag = true; } } } else if (date_type == 3) { if (("=".equals(operator1))) { if (defaultValue.equals(thresholdValue1) && "=".equals(operator2) && defaultValue.equals(thresholdValue2)) { flag = true; } else if (defaultValue.equals(thresholdValue1) && "!=".equals(operator2) && !defaultValue.equals(thresholdValue2)) { flag = true; } else if (defaultValue.equals(thresholdValue1) && !StringUtil.isNullOrEmpty(operator2)) { flag = true; } } else if ("!=".equals(operator1)) { if (!defaultValue.equals(thresholdValue1) && "=".equals(operator2) && defaultValue.equals(thresholdValue2)) { flag = true; } else if (!defaultValue.equals(thresholdValue1) && "!=".equals(operator2) && !defaultValue.equals(thresholdValue2)) { flag = true; } else if (!defaultValue.equals(thresholdValue1) && !StringUtil.isNullOrEmpty(operator2)) { flag = true; } } else if (!StringUtil.isNullOrEmpty(operator1)) { if ("=".equals(operator2) && defaultValue.equals(thresholdValue2)) { flag = true; } else if ("!=".equals(operator2) && !defaultValue.equals(thresholdValue2)) { flag = true; } } } return flag; }
嘿嘿,完成需求,但是是不是非常的乱,而且很容易写错。。。
然后,公司同事帮忙改了下:
private <E> boolean compare(Comparable<E> v, String op, E t) { boolean judgement = "=".equals(op) && v.equals(t); judgement = judgement || "!=".equals(op) && !v.equals(t); judgement = judgement || ">=".equals(op) && v.compareTo(t) >= 0; judgement = judgement || ">".equals(op) && v.compareTo(t) > 0; judgement = judgement || "<=".equals(op) && (v).compareTo(t) <= 0; judgement = judgement || "<".equals(op) && (v).compareTo(t) < 0; return judgement; } private boolean judge(final String value, String op, String threshold, int dateType) { boolean ignore = null == value || StringUtils.isBlank("" + value) || StringUtils.isBlank(op) || StringUtils.isBlank(threshold); boolean judgement = false; if (!ignore) { switch (dateType) { case PatrolActionParam.DATA_TYPE_DOUBLE: judgement = compare(Double.valueOf(value), op, Double.valueOf(threshold)); break; case PatrolActionParam.DATA_TYPE_INTEGER: judgement = compare(Integer.valueOf(value), op, Integer.valueOf(threshold)); break; case PatrolActionParam.DATA_TYPE_OTHER: case PatrolActionParam.DATA_TYPE_STRING: judgement = compare(value, op, threshold); break; default: break; } } return judgement; }
然后执行的时候
if (judge(value, operator1, thresholdValue1, dateType) && judge(value, operator2, thresholdValue2, dateType)) // 发送告警
我想静静