Guava - Range 類



Range 表示一個區間或一個序列。它用於獲取位於特定範圍內的數字/字串集。

類宣告

以下是com.google.common.collect.Range<C>類的宣告:

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

方法

序號 方法及描述
1

static <C extends Comparable<?>> Range<C> all()

返回包含型別 C 的所有值的範圍。

2

boolean apply(C input)已棄用。

僅為了滿足 Predicate 介面而提供;請改用 contains(C)。

3

static <C extends Comparable<?>> Range<C> atLeast(C endpoint)

返回包含所有大於或等於 endpoint 的值的範圍。

4

static <C extends Comparable<?>> Range<C> atMost(C endpoint)

返回包含所有小於或等於 endpoint 的值的範圍。

5

Range<C> canonical(DiscreteDomain<C> domain)

返回此範圍在給定域中的規範形式。

6

static <C extends Comparable<?>> Range<C> closed(C lower, C upper)

返回包含所有大於或等於 lower 且小於或等於 upper 的值的範圍。

7

static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper)

返回包含所有大於或等於 lower 且嚴格小於 upper 的值的範圍。

8

boolean contains(C value)

如果 value 在此範圍的邊界內,則返回 true。

9

boolean containsAll(Iterable<? extends C> values)

如果 values 中的每個元素都包含在此範圍中,則返回 true。

10

static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType)

從給定的 endpoint 返回一個範圍,該 endpoint 可以是包含的(閉合)或排除的(開放),並且沒有上限。

11

static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values)

返回包含所有給定值的最小範圍。

12

boolean encloses(Range<C> other)

如果 other 的邊界沒有擴充套件到此範圍的邊界之外,則返回 true。

13

boolean equals(Object object)

如果 object 是一個範圍,並且具有與該範圍相同的端點和邊界型別,則返回 true。

14

static <C extends Comparable<?>> Range<C> greaterThan(C endpoint)

返回包含所有嚴格大於 endpoint 的值的範圍。

15

int hashCode()

返回此範圍的雜湊碼。

16

boolean hasLowerBound()

如果此範圍具有下端點,則返回 true。

17

boolean hasUpperBound()

如果此範圍具有上端點,則返回 true。

18

Range<C> intersection(Range<C> connectedRange)

如果存在這樣的範圍,則返回同時被此範圍和 connectedRange 包含的最大範圍。

19

boolean isConnected(Range<C> other)

如果存在一個(可能為空)範圍同時被此範圍和 other 包含,則返回 true。

20

boolean isEmpty()

如果此範圍的形式為 [v..v) 或 (v..v],則返回 true。

21

static <C extends Comparable<?>> Range<C> lessThan(C endpoint)

返回包含所有嚴格小於 endpoint 的值的範圍。

22

BoundType lowerBoundType()

返回此範圍的下邊界的型別:如果範圍包含其下端點,則為 BoundType.CLOSED,否則為 BoundType.OPEN。

23

C lowerEndpoint()

返回此範圍的下端點。

24

static <C extends Comparable<?>> Range<C> open(C lower, C upper)

返回包含所有嚴格大於 lower 且嚴格小於 upper 的值的範圍。

25

static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper)

返回包含所有嚴格大於 lower 且小於或等於 upper 的值的範圍。

26

static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType)

返回包含從 lower 到 upper 的任何值的範圍,其中每個端點可以是包含的(閉合)或排除的(開放)。

27

static <C extends Comparable<?>> Range<C> singleton(C value)

返回僅包含給定值的範圍。

28

Range<C> span(Range<C> other)

返回同時包含此範圍和其他範圍的最小範圍。

29

String toString()

返回此範圍的字串表示形式,例如“[3..5)”(其他示例列在類文件中)。

30

BoundType upperBoundType()

返回此範圍的上邊界的型別:如果範圍包含其上端點,則為 BoundType.CLOSED,否則為 BoundType.OPEN。

31

C upperEndpoint()

返回此範圍的上端點。

32

static <C extends Comparable<?>> Range<C> upTo(C endpoint, BoundType boundType)

返回一個範圍,該範圍沒有下限,直到給定的 endpoint,該 endpoint 可以是包含的(閉合)或排除的(開放)。

繼承的方法

此類繼承自以下類:

  • java.lang.Object

Range 類的示例

使用您選擇的任何編輯器建立以下 Java 程式,例如在C:/> Guava中。

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("]");
   }
}

驗證結果

使用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 ]
廣告