在番石榴的RangeSet/Range中没有"大小"的概念?

sas*_*cha 3 java range intervals guava

我渴望在我的程序中使用Guava的RangeSets.尽管添加和合并范围的功能,我也对我的范围"大小"感兴趣.

一些评论:

  • 没有我感兴趣的范围是无限的!
  • 我正在使用的所有范围都是绑定类型"closedOpen"
  • 基础用例是一个离散的时空(大小=总计时间 - 时间)

这似乎是没有内置的东西(或者我没有看到它),我想知道是否有一个明确的理由反对这个概念(这意味着我不应该自己实现一些getSize()函数)或不.

我们来看看我的用例:

RangeSet<Integer> usageTicks = TreeRangeSet.create();
usageTicks.add(Range.closedOpen(3, 7));
usageTicks.add(Range.closedOpen(12,18));
usageTicks.add(Range.closedOpen(18, 23));

int size = usageTicks.hypotheticalGetSizeFunction(); // size = 15
Run Code Online (Sandbox Code Playgroud)

是否有任何理由反对以下情况:

Set<Range<Integer>> setOfRanges = usageTicks.asRanges();
int sum = 0;
for(Range<Integer> range : setOfRanges)
    sum += (range.upperEndpoint() - range.lowerEndpoint());
Run Code Online (Sandbox Code Playgroud)

fge*_*fge 6

番石榴Range只需要其封闭类型中的一个:它们实现Comparable.

但并非所有实施Comparable都具有距离概念.例如,你如何测量两个Strings 之间的距离?

这就是为什么番石榴也有DiscreteDomainContiguousSet; 与前者你有这样的方法next(),prev()distance(),这是你在这里感兴趣的.Guava的网站上有一篇文章.