开源项目

相关文章

更多

最近更新

更多

Guava Range类-范围处理

2019-04-23 23:04|来源: 网路

Range 表示一个间隔或一个序列。它被用于获取一组数字/串在一个特定范围之内。

类声明

以下是com.google.common.collect.Range<C>类的声明:

@GwtCompatiblepublic 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 ]



相关问答

更多

为什么Guava不为小的ImmutableLists使用专门的类?(Why does Guava not use specialized classes for small ImmutableLists?)

你能帮我理解这里涉及的权衡吗? 这是一个权衡: 性能 - 不分配临时数组可以节省成本。 但是,人们需要进行一些广泛的代码分析和基准测试来量化这种节省。 (我怀疑在大多数应用程序中它都是微不足道的。请阅读@Voo提供的这个链接 !) 可读性 - 拥有一堆额外的重载会使javadoc混乱。 可维护性 - 有一堆重载是以不需要临时对象的方式实现的,这需要大量的复制/粘贴编程,这使得将来的代码维护更加困难。 实用程序 - 这些重载的使用频率是多少? 我希望答案“很少”。 字节码占用空间 - 这些额外的重载 ...

调节方法调用使用Guava RateLimiter类(Throttling method calls using Guava RateLimiter class)

您需要在每次调用时在同一个RateLimiter上调用acquire() ,例如,通过在performOperation()使其可用: public class RateLimiterTest { public static void main(String[] args) { RateLimiter limiter = RateLimiter.create(1.0); for (int i = 0; i < 10; i++) { p ...

是否有可能将Guava的ForwardingListIterator和PeekingIterator结合起来?(Is it possible to combine Guava's ForwardingListIterator with a PeekingIterator?)

将一个新的“窥视”概念引入到一个已经很容易在两个方向上滚动的迭代器的价值在哪里? 如果你真的想要它,你可以实现两个简单的静态助手: public static <T> T peekNext(ListIterator<T> iterator) { T next = iterator.next(); iterator.previous(); return next; } public static <T> T peekPrevious(ListIterator<T> iterator) ...

番石榴的IntervalTree(IntervalTree in Guava)

Guava没有提供这个,尽管你可以通过找到给定点之前和之后的第一个范围来在RangeSet之上构建这样的东西。 但一般来说,除了类型的比较排序之外,Guava Range对距离,度量或任何其他内容一无所知 。 他们不知道10比15更接近11 。 Guava doesn't provide this, though you might be able to build such a thing on top of a RangeSet by finding the first range befor ...

在guava的AbstractService类中实现stop()(stop() implementation in guava's AbstractService class)

在RUNNING状态下调用stop()时,状态将更改为STOPPING并doStop()方法。 之后再次调用stop()不应该做任何事情。 doStop()实现应该调用notifyStopped() ,它将状态从STOPPING更改为TERMINATED 。 When you call stop() in the RUNNING state, the state is changed to STOPPING and the doStop() method gets called. Calling ...

Ceylon模块系统:Guava类不匹配,即使依赖树中只有一个Guava(Ceylon module system: Guava class mismatch even though there's only one Guava in dependencies tree)

好的,我明白了。 问题是RoleConverter转换为ceylon.language.String ,而api期望转换为java.lang.String 。 现在修复它: shared class RoleConverter() extends Converter<Role, JString>() { shared actual Role doBackward(JString? name) { "Cannot convert null to role." ...

Guava ValueGraph的简单示例(Simple example of Guava ValueGraph)

Guava wiki提供了以下使用ValueGraph示例: MutableValueGraph<Integer, Double> weightedGraph = ValueGraphBuilder.directed().build(); weightedGraph.addNode(1); weightedGraph.putEdgeValue(2, 3, 1.5); // also adds nodes 2 and 3 if not already present weightedGraph.p ...

不兼容的库版本selenium / guava(Incompatible library version selenium / guava)

因为你对com.google.guava:guava:23.3 org.seleniumhq.selenium:selenium-java:3.0.1依赖性com.google.guava:guava:23.3使用org.seleniumhq.selenium:selenium-java:3.0.1可能会让你在十字路口。 但是Selenium发行说明清楚地提到了以下番石榴依赖性: Selenium v2.49.0 :Bump guava到19版 Selenium v3.1.0 :需要更新最新的番石 ...

将Guava Range与自定义对象一起使用(Use Guava Range with custom object)

如果您阅读Range的javadoc: 请注意,无法迭代这些包含的值。 为此,请将此范围实例和相应的DiscreteDomain传递给ContiguousSet.create(com.google.common.collect.Range<C>, com.google.common.collect.DiscreteDomain<C>) 。 所以你的方法是正确的,除了你需要为自定义对象创建一个自定义DiscreteDomain : public class CustomDiscreteDomain ...

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsync 。 ServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建): 处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。 要使服务执行某些有用的操作,您必须将其转换为RUNNING状态 此状态下的服务正在运行。 这就是为什么你必须在它做任何事之前启动服务的原因。 我还建议不要从构造函数中调用startAsync,而是从创 ...