Guava – Range类

来源:这里教程网 时间:2026-02-17 21:41:54 作者:

Guava – Range 类

Range代表一个区间或一个序列。它被用来获得一组位于特定范围内的数字/字符串.

Range 类声明

以下是com.google.common.collection.Range <C>类的声明 −

@GwtCompatiblepublic final class Range<C extends Comparable>   extends Object      implements Predicate<C>, Serializable

Range 类函数

序号函数和描述
1static <C extends Comparable<?>> Range<C> all()
返回一个包含C类型的每个值的范围.
2boolean apply(C input)Deprecated.
仅为满足谓词接口而提供;使用contains(C)代替.
3static <C extends Comparable<?>> Range<C> atLeast(C endpoint)
返回一个包含所有大于或等于端点的值的范围.
4static <C extends Comparable<?>> Range<C> atMost(C endpoint)
返回一个包含所有小于或等于端点的值的范围.
5Range<C> canonical(DiscreteDomain<C> domain)
返回这个范围在给定域中的经典形式.
6static <C extends Comparable<?>> Range<C> closed(C lower, C upper)
返回一个包含所有大于或等于下限和小于或等于上限的数值的范围.
7static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper)
返回一个包含所有大于或等于下限且严格小于上限的值的范围.
8boolean contains(C value)
如果值在这个范围内,则返回真.
9boolean containsAll(Iterable<? extends C> values)
如果values中的每个元素都包含在这个范围内,则返回true.
10static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType)
返回一个从给定端点开始的范围,这个范围可以是包容的(封闭的)或排他的(开放的),没有上限.
11static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values)
返回包含所有给定值的最小范围.
12boolean encloses(Range<C> other)
如果其他人的边界没有延伸到这个范围的边界之外,则返回真.
13boolean equals(Object object)
如果对象是一个具有与此范围相同的端点和绑定类型的范围,则返回真.
14static <C extends Comparable<?>> Range<C> greaterThan(C endpoint)
返回一个包含所有严格大于端点的值的范围.
15int hashCode()
返回该范围的哈希代码.
16boolean hasLowerBound()
如果这个范围有一个较低的端点,则返回true.
17boolean hasUpperBound()
如果这个范围有一个上端点,则返回true.
18Range<C> intersection(Range<C> connectedRange)
如果存在这样的范围,返回这个范围和connectedRange所包围的最大范围.
19boolean isConnected(Range<C> other)
如果存在一个(可能是空的)范围,并被这个范围和其他范围所包围,则返回真.
20boolean isEmpty()
如果这个范围是[v…v]或(v…v)的形式,返回真.
21static <C extends Comparable<?>> Range<C> lessThan(C endpoint)
返回一个包含所有严格小于端点的值的范围.
22BoundType lowerBoundType()
返回此范围的下限的类型。如果该范围包括其下端点,则返回BoundType.CLOSED,如果不包括则返回BoundType.OPEN.
23C lowerEndpoint()
返回该范围的下端点.
24static <C extends Comparable<?>> Range<C> open(C lower, C upper)
返回一个包含所有严格大于下限和严格小于上限的值的范围.
25static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper)
返回一个包含所有严格大于下限且小于或等于上限的数值的范围.
26static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType)
返回一个包含从低到高任何数值的范围,其中每个端点可以是包容的(封闭的)或排他的(开放的).
27static <C extends Comparable<?>> Range<C> singleton(C value)
返回一个只包含给定值的范围.
28Range<C> span(Range<C> other)
返回包含这个范围和其他范围的最小范围.
29String toString()
返回这个范围的字符串表示,例如”[3…5]” (其他例子在类的文档中列出).
30BoundType upperBoundType()
返回此范围的上界的类型。如果该范围包括其上端点,则返回BoundType.CLOSED;如果不包括,则返回BoundType.OPEN.
31C upperEndpoint()
返回该范围的上端点.
32static <C extends Comparable<?>> Range<C> upTo(C endpoint, BoundType boundType)
返回一个没有下限的范围,直到给定的端点,这个范围可以是包容的(封闭的)或排他的(开放的).

Range 类继承

该类继承了以下类的方法 −

java.lang.Object

Range 类示例

在C:/ >Guava中使用你选择的任何编辑器创建以下java程序

GuavaTester.java

import com.google.common.collect.ContiguousSet;import com.google.common.collect.DiscreteDomain;import com.google.common.collect.Range;import com.google.common.primitives.Ints;public class GuavaTester {   public static void main(String args[]) {      GuavaTester tester = new GuavaTester();      tester.testRange();   }   private void testRange() {      //create a range [a,b] = { x | a <= x <= b}      Range<Integer> range1 = Range.closed(0, 9);         System.out.print("[0,9] : ");      printRange(range1);             System.out.println("5 is present: " + range1.contains(5));      System.out.println("(1,2,3) is present: " + range1.containsAll(Ints.asList(1, 2, 3)));      System.out.println("Lower Bound: " + range1.lowerEndpoint());      System.out.println("Upper Bound: " + range1.upperEndpoint());      //create a range (a,b) = { x | a < x < b}      Range<Integer> range2 = Range.open(0, 9);      System.out.print("(0,9) : ");      printRange(range2);      //create a range (a,b] = { x | a < x <= b}      Range<Integer> range3 = Range.openClosed(0, 9);      System.out.print("(0,9] : ");      printRange(range3);      //create a range [a,b) = { x | a <= x < b}      Range<Integer> range4 = Range.closedOpen(0, 9);      System.out.print("[0,9) : ");      printRange(range4);      //create an open ended range (9, infinity      Range<Integer> range5 = Range.greaterThan(9);      System.out.println("(9,infinity) : ");      System.out.println("Lower Bound: " + range5.lowerEndpoint());      System.out.println("Upper Bound present: " + range5.hasUpperBound());      Range<Integer> range6 = Range.closed(3, 5);         printRange(range6);      //check a subrange [3,5] in [0,9]      System.out.println("[0,9] encloses [3,5]:" + range1.encloses(range6));      Range<Integer> range7 = Range.closed(9, 20);        printRange(range7);      //check ranges to be connected              System.out.println("[0,9] is connected [9,20]:" + range1.isConnected(range7));      Range<Integer> range8 = Range.closed(5, 15);        //intersection      printRange(range1.intersection(range8));      //span      printRange(range1.span(range8));   }   private void printRange(Range<Integer> range) {            System.out.print("[ ");      for(int grade : ContiguousSet.create(range, DiscreteDomain.integers())) {         System.out.print(grade +" ");      }      System.out.println("]");   }}

Range 类验证结果

使用javac编译器编译该类,如下所示 −

C:\Guava>javac GuavaTester.java

现在运行GuavaTester来看看结果.

C:\Guava>java GuavaTester

查看结果.

[0,9] : [ 0 1 2 3 4 5 6 7 8 9 ]5 is present: true(1,2,3) is present: trueLower Bound: 0Upper Bound: 9(0,9) : [ 1 2 3 4 5 6 7 8 ](0,9] : [ 1 2 3 4 5 6 7 8 9 ][0,9) : [ 0 1 2 3 4 5 6 7 8 ](9,infinity) : Lower Bound: 9Upper Bound present: false[ 3 4 5 ][0,9] encloses [3,5]:true[ 9 10 11 12 13 14 15 16 17 18 19 20 ][0,9] is connected [9,20]:true[ 5 6 7 8 9 ][ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]

相关推荐