📜  范围类 |番石榴 |Java(1)

📅  最后修改于: 2023-12-03 14:57:12.106000             🧑  作者: Mango

范围类 | 番石榴 | Java

在 Java 中,范围类用于表示一段连续的数值范围,常见的范围类有 java.util.Rangeorg.apache.commons.lang3.Range。范围类可以提供一些方便的方法,例如判断一个数值是否在范围内、获取范围的起始值和结束值等。

java.util.Range

java.util.Range 是 Java 标准库中自带的范围类,其构造函数如下:

public Range(T minimum, T maximum)

其中 T 表示范围的类型,可以是任意实现了 Comparable 接口的类型,例如 IntegerDouble 等。

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

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)

其中 startend 分别表示范围的起始值和结束值,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