Guava Range類


Range 表示一個間隔或一個序列。它被用於獲取一組數位/串在一個特定範圍之內。

類宣告

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

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

方法

S.N. 方法及說明
1 static <C extends Comparable<?>> Range<C> all()
返回包含C型的每一個值範圍
2 boolean apply(C input)Deprecated. 
只有提供滿足謂詞介面;使用包含(C)來代替。
3 static <C extends Comparable<?>> Range<C> atLeast(C endpoint)
返回包含大於或等於終點(endpoint)的所有值的範圍內。
4 static <C extends Comparable<?>> Range<C> atMost(C endpoint)
返回包含的所有值小於或等於終點的範圍內。
5 Range<C> canonical(DiscreteDomain<C> domain)
返回此範圍內,在給定域中的規範形式。
6 static <C extends Comparable<?>> Range<C> closed(C lower, C upper)
返回包含大於所有值或等於降低且小於或等於上限的範圍內。
7 static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper)
返回包含大於或等於下限和所有值嚴格大於上限以下的範圍內。
8 boolean contains(C value)
返回true,如果值是這個範圍的範圍之內。
9 boolean containsAll(Iterable<? extends C> values)
如果值每一個元素都包含在這個範圍內,則返回 true。
10 static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType)
返回的範圍內的給定的端點,它可以是包容性(閉合)或專用(開),沒有上限。
11 static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values)
返回包含所有給定值的最小範圍內。
12 boolean encloses(Range<C> other)
返回true,如果其他的邊界不在該範圍的邊界之外延伸。
13 boolean equals(Object object)
返回true,如果物件是具有相同端點和系結型別,這個範圍內的範圍。
14 static <C extends Comparable<?>> Range<C> greaterThan(C 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)
如果存在這是由兩者此範圍和其他封閉(可能為空)的範圍,則返回true。
20 boolean isEmpty()
返回true,如果這個範圍是形式 [v..v)  或 (v..v].
21 static <C extends Comparable<?>> Range<C> lessThan(C endpoint)
返回一個包含所有值嚴格小於端點的範圍內。
22 BoundType lowerBoundType()
返回型別這個範圍的下限:如果範圍包括它的下端點BoundType.CLOSED,如果沒有BoundType.OPEN。
23 C lowerEndpoint()
返回該範圍的較低端點。
24 static <C extends Comparable<?>> Range<C> open(C lower, C upper)
返回一個包含所有值嚴格大於下限和嚴格比上端更小一個範圍。
25 static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper)
返回包含所有值嚴格低於更大且小於或等於上限的範圍內。
26 static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType)
返回包含任何值由下到上,每個端點可以是包容性(關閉)或專用(開)的範圍。
27 static <C extends Comparable<?>> Range<C> singleton(C value)
返回包含只在給定範圍內
28 Range<C> span(Range<C> other)
返回最小的範圍包圍兩者這個範圍和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)
返回一個範圍,沒有下限到給定的端點,它可以是包容性(閉合)或專用(開)。

方法繼承

這個類從以下類繼承的方法:

  • 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 ]