Guava工具之Range类

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%免费领取楼主的所有面试题资料!

原文链接:,转发请注明来源!