背景
在项目中需要存储区间值数据,并进行重复区间判断。终于找到一种有用的方案,特此记录一下,以防不备之需。
取值范围符号包括:
- 7-全闭区间
- 8-左闭右开区间
- 9-左开右闭区间
- 10-全开区间
下图为实际应用场景:
实现代码如下:
工具类
public class SectionUtil {
//最小值
private String min_entity;
//最大值
private String max_entity;
//左侧括号状态:false -开区间 true-- 闭区间
private boolean left_sate = false;
//右侧括号状态:false -开区间 true-- 闭区间
private boolean right_sate = false;
private SectionUtil() {
}
public SectionUtil(String min_entity, String max_entity, boolean left_sate, boolean right_sate) {
this.min_entity = min_entity;
this.max_entity = max_entity;
this.left_sate = left_sate;
this.right_sate = right_sate;
}
private String getMin_entity() {
return min_entity;
}
private String getMax_entity() {
return max_entity;
}
private boolean isLeft_sate() {
return left_sate;
}
private boolean isRight_sate() {
return right_sate;
}
/**
* @description: 创建负区间((负无穷,X])
* @param value 区间最大值
* @param right_sate 区间开闭状态
*/
private static SectionUtil creatFu(String value, boolean right_sate) {
return new SectionUtil("", value, false, right_sate);
}
/**
* @description: 创建正区间[X,正无穷))
* @param value 区间最小值
* @param left_sate 区间开闭状态
*/
private static SectionUtil creatZheng(String value, boolean left_sate) {
return new SectionUtil(value, "", left_sate, false);
}
/**
* @description: 创建闭合区间([X,Y])
* @param min 区间最小值
* @param max 区间最大值
* @param left_sate 区间左侧开闭状态
* @param right_sate 区间右侧开闭状态
* @return
*/
private static SectionUtil creat(String min, boolean left_sate, String max, boolean right_sate) {
return new SectionUtil(min, max, left_sate, right_sate);
}
/**
* @description: 将实体类转换成区间集合
* @param record 待转换的实体类
* @return 转换后的区间集合类(不等于时转换后为2个区间,所以采用集合)
*/
private static List<SectionUtil> getSections(RepeatIntervalVO record) {
List<SectionUtil> list = new ArrayList