From 130dc689ba323fc0013b69773af71192bffe61ed Mon Sep 17 00:00:00 2001 From: huangchengxing <841396397@qq.com> Date: Fri, 30 Sep 2022 14:41:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=AF=E6=8C=81=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8C=BA=E9=97=B4=E7=9A=84=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/range/Bound.java | 587 ++++++++++++++++++ .../cn/hutool/core/lang/range/BoundType.java | 140 +++++ .../hutool/core/lang/range/BoundedRange.java | 572 +++++++++++++++++ .../cn/hutool/core/lang/range/BoundTest.java | 211 +++++++ .../hutool/core/lang/range/BoundTypeTest.java | 83 +++ .../core/lang/range/BoundedRangeTest.java | 283 +++++++++ 6 files changed, 1876 insertions(+) create mode 100644 hutool-core/src/main/java/cn/hutool/core/lang/range/Bound.java create mode 100644 hutool-core/src/main/java/cn/hutool/core/lang/range/BoundType.java create mode 100644 hutool-core/src/main/java/cn/hutool/core/lang/range/BoundedRange.java create mode 100644 hutool-core/src/test/java/cn/hutool/core/lang/range/BoundTest.java create mode 100644 hutool-core/src/test/java/cn/hutool/core/lang/range/BoundTypeTest.java create mode 100644 hutool-core/src/test/java/cn/hutool/core/lang/range/BoundedRangeTest.java diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/range/Bound.java b/hutool-core/src/main/java/cn/hutool/core/lang/range/Bound.java new file mode 100644 index 000000000..105d51f13 --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/lang/range/Bound.java @@ -0,0 +1,587 @@ +package cn.hutool.core.lang.range; + +import cn.hutool.core.text.CharSequenceUtil; + +import java.util.Objects; +import java.util.function.Predicate; + +/** + *
边界对象,描述具有特定上界或下界的单侧无界的区间。 + * + *
边界根据其{@link #getType()}所获得的类型,可用于描述基于边界值t的不等式: + *
边界对象本身实现了{@link Comparable}接口,
+ * 当使用{@link Comparable#compareTo}比较两个边界对象时,
+ * 返回的比较值表示两个边界对象对应的点在实数轴上从左到右的先后顺序。
+ * 比如:
+ * 若令当前边界点为t1,另一边界点为t2,则有
+ *
比较另一边界与当前边界在坐标轴上位置的先后顺序。
+ * 若令当前边界为t1,另一边界为t2,则有
+ *
比较另一边界与当前边界在坐标轴上位置的先后顺序。
+ * 若令当前边界为t1,另一边界为t2,则有
+ *
比较另一边界与当前边界在坐标轴上位置的先后顺序。
+ * 若令当前边界为t1,另一边界为t2,则有
+ *
比较另一边界与当前边界在坐标轴上位置的先后顺序。
+ * 若令当前边界为t1,另一边界为t2,则有
+ *
参考Guava的Range实现,用于描述作为上下界的两个{@link Bound}实例围成的一段区间。
+ * 作为{@link Predicate}使用时,可检验指定值是否在区间中,即指定值是否同时满足上下界的{@link Bound#test}方法。
+ *
+ *
支持通过工厂方法创建下述几种类型的区间 + *
根据数学定义,当区间中无任何实数时,认为该区间代表的集合为空集,
+ * 用户可通过{@link #isEmpty}确认当前实例是否为空区间。
+ * 若实例上界a,下界为b,则当实例满足下述任意条件时,认为其为一个空区间:
+ *
当前区间是否为空。
+ * 当由下界left与上界right构成的区间,
+ * 符合下述任意条件时,认为当前区间为空:
+ *