Guava 简明教程

Guava - Range Class

Range 表示一个区间或序列。它用于获取处在特定范围内的数字/字符串的集合。

Class Declaration

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

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

Methods

Sr.No

Method & Description

1

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; all() 返回包含 C 类型的所有值的范围。

2

boolean apply(C input)Deprecated. 仅提供以满足 Predicate 接口;改为使用 contains©。

3

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; atLeast(C endpoint) 返回包含大于或等于 endPoint 的所有值的范围。

4

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; atMost(C endpoint) 返回包含小于或等于 endPoint 的所有值的范围。

5

Range&lt;C&gt; canonical(DiscreteDomain&lt;C&gt; domain) 返回给定域中此范围的规范形式。

6

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; closed(C lower, C upper) 返回包含大于或等于 lower、且小于或等于 upper 的所有值的范围。

7

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; closedOpen(C lower, C upper) 返回包含大于或等于 lower、且严格小于 upper 的所有值的范围。

8

boolean contains(C value) 如果 value 在此范围的界限内,则返回 true。

9

boolean containsAll(Iterable&lt;? extends C&gt; values) 如果 values 中的每个元素都包含在此范围内,则返回 true。

10

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; downTo(C endpoint, BoundType boundType) 返回一个从给定端点开始的范围,该范围可能包含(闭合)或不包含(开放),且无上限。

11

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; encloseAll(Iterable&lt;C&gt; values) 返回包含所有给定值的最小的范围。

12

boolean encloses(Range&lt;C&gt; other) 如果其他范围的界限未超出此范围的界限,则返回 true。

13

boolean equals(Object object) 如果对象是与此范围具有相同端点和边界类型的范围,则返回 true。

14

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; greaterThan(C endpoint) 返回包含所有严格大于端点的值的范围。

15

int hashCode() 为该范围返回 hash 代码。

16

boolean hasLowerBound() 如果此范围具有较低端点,则返回 true。

17

boolean hasUpperBound() 如果此范围具有较高端点,则返回 true。

18

Range&lt;C&gt; intersection(Range&lt;C&gt; connectedRange) 如果存在这样的范围,则返回此范围和 connectedRange 共同包含的最大范围。

19

boolean isConnected(Range&lt;C&gt; other) 如果存在一个(可能为空)的范围同时包含在此范围和 other 范围内,则返回 true。

20

boolean isEmpty() 如果此范围处于 [v..v) 或 (v..v] 形式,则返回 true。

21

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; lessThan(C endpoint) 返回包含所有严格小于端点的值的范围。

22

BoundType lowerBoundType() 返回此范围的下限类型:如果范围包含下限,则为 BoundType.CLOSED,否则为 BoundType.OPEN。

23

C lowerEndpoint() 返回此范围的下限。

24

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; open(C lower, C upper) 返回一个包含所有严格大于较低值且严格小于较高值的范围。

25

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; openClosed(C lower, C upper) 返回一个包含所有严格大于较低值且小于或等于较高值的范围。

26

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; range(C lower, BoundType lowerType, C upper, BoundType upperType) 返回一个包含从较低值到较高值的任何值的范围,其中每个端点可以是包含(闭合)的,也可以是不包含(开放)的。

27

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; singleton(C value) 返回仅包含给定值的一个范围。

28

Range&lt;C&gt; span(Range&lt;C&gt; other) 返回同时包含此范围和 other 范围的最小范围。

29

String toString() 返回该范围的字符串表示形式,比如“[3..5)”(其他示例都在类文档中列出)。

30

BoundType upperBoundType() 返回该范围的上限类型:BoundType.CLOSED(如果范围包含其上限), BoundType.OPEN(如果范围不包含上限)。

31

C upperEndpoint() 返回该范围的上限。

32

static &lt;C extends Comparable&lt;?&gt;&gt; Range&lt;C&gt; upTo(C endpoint, BoundType boundType) 返回一个到给定端点的无上限范围,它可以包含(CLOSED)或不包含(OPEN)上限。

Methods Inherited

此类从以下类继承方法 −

  1. java.lang.Object

Example of Range Class

使用任意你选择的编辑器在 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("]");
   }
}

Verify the Result

按照如下方式使用 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: true
Lower Bound: 0
Upper 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: 9
Upper 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 ]