范围类 |番石榴 |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