📅  最后修改于: 2023-12-03 14:57:12.106000             🧑  作者: Mango
在 Java 中,范围类用于表示一段连续的数值范围,常见的范围类有 java.util.Range
和 org.apache.commons.lang3.Range
。范围类可以提供一些方便的方法,例如判断一个数值是否在范围内、获取范围的起始值和结束值等。
java.util.Range
是 Java 标准库中自带的范围类,其构造函数如下:
public Range(T minimum, T maximum)
其中 T
表示范围的类型,可以是任意实现了 Comparable
接口的类型,例如 Integer
、Double
等。
java.util.Range
提供了一些常用的方法,如下:
public boolean contains(T value)
判断给定的值是否在范围内。
public boolean isAfter(Range<T> otherRange)
判断当前范围是否在另一个范围之后。
public boolean isBefore(Range<T> otherRange)
判断当前范围是否在另一个范围之前。
public T getMinimum()
获取范围的起始值。
public T getMaximum()
获取范围的结束值。
org.apache.commons.lang3.Range
是 Apache Commons Lang 库中的范围类,与 java.util.Range
功能类似,但提供了更多的方法。
org.apache.commons.lang3.Range
的构造函数如下:
public Range(T start, T end, Comparator<T> comparator)
其中 start
和 end
分别表示范围的起始值和结束值,comparator
则是比较器,可以自定义范围的比较方式。
org.apache.commons.lang3.Range
提供的方法包括:
public boolean contains(T value)
判断给定的值是否在范围内。
public boolean isAfter(Range<T> otherRange)
判断当前范围是否在另一个范围之后。
public boolean isBefore(Range<T> otherRange)
判断当前范围是否在另一个范围之前。
public T getMinimum()
获取范围的起始值。
public T getMaximum()
获取范围的结束值。
public boolean overlapsWith(Range<T> otherRange)
判断当前范围是否与另一个范围重叠。
public Range<T> intersectionWith(Range<T> otherRange)
获取当前范围与另一个范围的交集。
public Range<T>[] split(T point)
将当前范围按给定的点分成两部分,返回一个包含两个范围的数组。
import java.util.*;
import org.apache.commons.lang3.Range;
public class RangeExample {
public static void main(String[] args) {
Range<Integer> range1 = Range.between(1, 10);
Range<Integer> range2 = new Range<>(11, 20, Comparator.reverseOrder());
System.out.println(range1.contains(5)); // true
System.out.println(range1.isAfter(range2)); // false
System.out.println(range1.getMinimum()); // 1
System.out.println(range1.getMaximum()); // 10
System.out.println(range1.overlapsWith(range2)); // false
Range<Integer>[] splits = range2.split(15);
System.out.println(splits[0]); // [11,15)
System.out.println(splits[1]); // [15,20)
}
}
详细示例代码请见 GitHub:https://github.com/JackieZhengjie/java-range-example。