现在的位置: 首页 > 综合 > 正文

java比较阈值,包含”>” “<"">=”"<=”"=”"!=”.

2018年04月18日 ⁄ 综合 ⁄ 共 6995字 ⁄ 字号 评论关闭

最近做个需求,获取的值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)) // 发送告警



我想静静哭





抱歉!评论已关闭.