📜  范围类 |番石榴 |Java

📅  最后修改于: 2022-05-13 01:55:19.870000             🧑  作者: Mango

范围类 |番石榴 |Java

Guava 的 Range 表示一个区间,例如 a < range < b。这里范围包括 a 和 b 之间的任何值,称为形成边界的端点。边界之间的任何值都是 Comparable 类型值的连续跨度。

声明: com.google.common.collect.Range< C >类的声明是:

@GwtCompatible
public final class Range
   extends Object
      implements Predicate, Serializable

范围的每一端可以是有界的或无界的。如果有界,则存在关联的端点值。如果不是,它将被视为无穷大。范围可以进一步定义为开放或封闭,具体取决于范围是排除端点还是包含端点。

  • open(a, b) :表示a < range < b,记法形式为(a, b)。
  • closed(a, b) : 表示 a <= range <= b, 表示形式为 [a, b]。
  • openClosed(a, b) :表示a < range <= b,记法形式为(a, b]。
  • closedOpen(a, b) :表示a <= range < b,表示形式为[a, b)。
  • GreaterThan(a) : 表示范围 > a,记法形式为 (a..+inf)。
  • atLeast(a, b) :它表示范围 >= a,并以符号形式表示,[a..+inf)。
  • lessThan(a, b) :表示范围 < b,以符号形式表示,(-inf..b)。
  • atMost(a, b) :它表示范围 <= b,并以符号形式表示,(-inf..b]。
  • all() : 表示-inf < range < +inf,记法形式为(-inf..+inf)。

下面给出的是 Guava 的 Range 类提供的一些方法:

注意:当两个端点都存在时,上端点不能小于下端点。仅当至少有一个边界关闭时,端点才可能相等:

  • [a..a] :单例范围。
  • [a..a) 或 (a..a] :空范围,也有效。
  • (a..a) : 无效,会抛出异常。

番石榴的 Range 类提供的其他一些方法是:

例外:

  • open : IllegalArgumentException如果 lower 大于或等于 upper。
  • 关闭:如果下限大于上限,则出现IllegalArgumentException
  • closedOpen: IllegalArgumentException如果lower 大于upper。
  • openClosed : IllegalArgumentException如果lower 大于upper。
  • range : IllegalArgumentException如果lower 大于upper。
  • encloseAll : ClassCastException如果参数不能相互比较, NoSuchElementException如果值为空, NullPointerException如果任何值为 null。
  • lowerEndpoint : IllegalStateException如果此范围在下方无界(即 hasLowerBound() 返回 false)。
  • lowerBoundType : IllegalStateException如果此范围在下方无界(即 hasLowerBound() 返回 false)。
  • upperEndpoint :如果此范围在上方无界(即 hasUpperBound() 返回 false),则为IllegalStateException
  • upperBoundType : IllegalStateException如果这个范围在上面是无界的(也就是说,hasUpperBound() 返回 false)。
  • 交集:如果 isConnected(connectedRange) 为假,则IllegalArgumentException


下面给出了一些示例,以更好地理解实现:
示例 1:

// Java code to show implementation
// of Range class of Guava
import com.google.common.collect.Range;
  
class GFG {
  
    // Driver code
    public static void main(String[] args)
    {
  
        // Taking range (1, 5)
        // Note that here 1 and 5 are not included
        Range range = Range.open(1, 5);
  
        // Checking if range contains 1 or not
        System.out.println(range.contains(1));
  
        // Checking if range contains 2 or not
        System.out.println(range.contains(2));
  
        // Checking if range contains 3 or not
        System.out.println(range.contains(3));
  
        // Checking if range contains 4 or not
        System.out.println(range.contains(4));
    }
}

输出 :

false
true
true
true

示例 2:

// Java code to show implementation
// of Range class of Guava
import com.google.common.collect.Range;
  
class GFG {
  
    // Driver code
    public static void main(String[] args)
    {
  
        // Taking range [1, 5]
        // Note that here 1 and 5 are included
        Range range = Range.closed(1, 5);
  
        // Checking if range contains 1 or not
        System.out.println(range.contains(1));
  
        // Checking if range contains 2 or not
        System.out.println(range.contains(2));
  
        // Checking if range contains 3 or not
        System.out.println(range.contains(3));
  
        // Checking if range contains 5 or not
        System.out.println(range.contains(5));
    }
}

输出 :

true
true
true
true

示例 3:

// Java code to show implementation
// of Range class of Guava
import com.google.common.collect.Range;
  
class GFG {
  
    // Driver code
    public static void main(String[] args)
    {
  
        // Taking range (2, +inf)
        // Note that numbers less than equal to 2
        // are not included
        Range range = Range.greaterThan(2);
  
        // Checking if range contains 1 or not
        System.out.println(range.contains(1));
  
        // Checking if range contains 2 or not
        System.out.println(range.contains(2));
  
        // Checking if range contains 130 or not
        System.out.println(range.contains(130));
  
        // Checking if range contains 500 or not
        System.out.println(range.contains(500));
    }
}

输出 :

false
false
true
true

示例 4:

// Java code to show implementation
// of Range class of Guava
import com.google.common.collect.Range;
  
class GFG {
  
    // Driver code
    public static void main(String[] args)
    {
  
        // Taking range (-inf, 2]
        // Note that only numbers less than equal to 2
        // are included
        Range range = Range.atMost(2);
  
        // Checking if range contains 1 or not
        System.out.println(range.contains(1));
  
        // Checking if range contains 2 or not
        System.out.println(range.contains(2));
  
        // Checking if range contains -1 or not
        System.out.println(range.contains(-1));
  
        // Checking if range contains 5 or not
        System.out.println(range.contains(5));
    }
}

输出 :

true
true
true
false