1 介绍
Range 表示一个间隔或一个序列。在数学上就是指一个区间,它被用于获取一组数字/串在一个特定范围之内。
2 各个方法
2.1 create方法
作用:用来创建区间,有开区间和闭区间。
@Test
public void create(){
// [a,b]
Range closed = Range.closed(0, 9);
// (a,b]
Range openClosed = Range.openClosed(0, 9);
// [a,b)
Range closedOpen = Range.closedOpen(0, 9);
// (a,b)
Range open = Range.open(0, 9);
// (a,+∞)
Range greaterThan = Range.greaterThan(0);
// [a,+∞)
Range atLeast = Range.atLeast(0);
// (-∞,b]
Range atMost = Range.atMost(0);
// (-∞,b)
Range lessThan = Range.lessThan(0);
// (-∞,+∞)
Range> all = Range.all();
}
2.2 closed方法
作用:创建一个闭区间,分别打印出上界、下届、是否包含、上界类型、下届类型信息。
// 代码
@Test
public void closed(){
// [a,b]
Range range = Range.closed(0, 9);
log.info("上界:"+range.upperEndpoint());
log.info("下界:"+range.lowerEndpoint());
log.info("是否包含0:"+range.contains(0));
log.info("上界类型:"+range.upperBoundType());
log.info("下界类型:"+range.lowerBoundType());
}
// 输出
INFO - 上界:9
INFO - 下界:0
INFO - 是否包含0:true
INFO - 上界类型:CLOSED
INFO - 下界类型:CLOSED
2.3 hasBound方法
作用:判断是否有上下界
// 代码
@Test
public void hasBound(){
// [a,b]
Range range = Range.closed(0, 9);
log.info("是否有上界:"+range.hasUpperBound());
log.info("是否有下界:"+range.hasLowerBound());
// (-∞,+∞)负无穷和正无穷,说明无界
Range> all = Range.all();
log.info("是否有上界:"+all.hasUpperBound());
log.info("是否有下界:"+all.hasLowerBound());
}
// 输出
INFO - 是否有上界:true
INFO - 是否有下界:true
INFO - 是否有上界:false
INFO - 是否有下界:false
2.4 isConnected方法
作用:判断两个区间是否相连。
// 代码
@Test
public void isConnected(){
// [a,b]
Range openRightRange = Range.openClosed(1, 10);
Range otherRange = Range.closedOpen(11, 15);
log.info("是否相连:"+openRightRange.isConnected(otherRange));
otherRange = Range.closedOpen(10, 15);
log.info("是否相连:"+openRightRange.isConnected(otherRange));
}
// 输出
INFO - 是否相连:false
INFO - 是否相连:true
2.5 isConnected方法
作用:判断区间是否为空。
// 代码
@Test
public void isEmpty(){
// [a,b]
Range range = Range.openClosed(1, 10);
log.info(range.isEmpty());
range = Range.openClosed(5, 5);
log.info(range.isEmpty());
}
// 输出
INFO - false
INFO - true
2.6 singleton方法
作用:返回只包含一个数字的区域
// 代码
@Test
public void singleton(){
Range range = Range.singleton(1);
log.info(range.upperEndpoint());
log.info(range.lowerEndpoint());
}
// 输出
INFO - 1
INFO - 1
2.7 intersection方法
作用:求交集。
// 代码
@Test
public void intersection(){
Range openRightRange = Range.openClosed(1, 10);
Range otherRange = Range.closedOpen(10, 15);
Range intersection = otherRange.intersection(openRightRange);
log.info(intersection.isEmpty());
}
// 输出
INFO - false
2.8 containsAll方法
作用:包含所有。
// 代码
@Test
public void containsAll(){
Range range = Range.closed(1, 10);
boolean result = range.containsAll(Arrays.asList(1,2,3));
log.info(result);
}
// 输出
INFO - true
2.9 encloses方法
作用:包含,子集。
// 代码
@Test
public void encloses(){
Range rangeParent = Range.closed(1, 10);
Range rangeChild = Range.closedOpen(4, 5);
boolean result = rangeParent.encloses(rangeChild);
log.info(result);
}
// 输出
INFO - true
2.10 gap方法
作用:两个区间之间的范围差距,前提条件:两个区间不能有交集,否则会报错。
// 代码
@Test
public void gap(){
// return (3,5)
Range.closed(1,3).gap(Range.closed(5,7));
// IllegalArgumentException
//Range.closed(1,6).gap(Range.closed(5,7));
// return (-1,1)
Range.closed(1,3).gap(Range.closed(-5,-1));
}
2.11 span方法
作用:求并集
// 代码
@Test
public void span(){
// return [3,10)
Range.closed(3,5).span(Range.open(5,10));
// return (0,9)
Range.closed(0,9).span(Range.closed(3,4));
}
2.12 canonical方法
作用:把离散区域转成区间的规范形式。
// 代码
@Test
public void canonical(){
Range range = Range.closed(10, 15);
Range canonical = range.canonical(DiscreteDomain.integers());
log.info(canonical.isEmpty());
}
// 输出
INFO - false
2.13 downTo方法
作用:下限到。
// 代码
@Test
public void downTo(){
// [10,+∞)
Range range = Range.downTo(10, BoundType.CLOSED);
log.info(range.contains(10));
}
// 输出
INFO - true
2.14 upTo方法
作用:上限到。
// 代码
@Test
public void upTo(){
// (-∞,10)
Range range = Range.upTo(10, BoundType.OPEN);
log.info(range.contains(10));
}
// 输出
INFO - false
2.15 toString方法
作用:转字符串。
// 代码
@Test
public void rangeToString(){
// (-∞,10)
Range range = Range.upTo(10, BoundType.OPEN);
log.info(range.toString());
}
// 输出
INFO - (-∞..10)
3 总结
Guava的Range工具类的基本方法都覆盖到了,大家可以调下代码试试看,有什么不清楚,欢迎留言,一起沟通讨论。码代码不易,帮忙点个赞再走呗,感谢!!!
【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!