Java 没有“的概念;“尺寸”;番石榴';s范围集/范围?

Java 没有“的概念;“尺寸”;番石榴';s范围集/范围?,java,range,guava,intervals,Java,Range,Guava,Intervals,我渴望在我的程序中使用番石榴的RangeSets。尽管有添加和合并范围的功能,我还是对范围的“大小”感兴趣 一些评论: 没有我感兴趣的范围是无限的 我使用的所有范围都是绑定类型“closedOpen” 底层用例是一个离散的时间-空间(大小=累计时间刻度) 这似乎不是内置的(或者我没有看到),我想知道在概念上是否有明确的理由反对这一点(这意味着我不应该自己实现一些getSize()函数) 让我们看看我的用例: RangeSet<Integer> usageTicks = TreeR

我渴望在我的程序中使用番石榴的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
RangeSet 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();//尺寸=15
是否有任何理由反对以下内容:

Set<Range<Integer>> setOfRanges = usageTicks.asRanges();
int sum = 0;
for(Range<Integer> range : setOfRanges)
    sum += (range.upperEndpoint() - range.lowerEndpoint());
Set-setOfRanges=usageTicks.asRanges();
整数和=0;
用于(范围:setOfRanges)
总和+=(range.upperEndpoint()-range.lowerEndpoint());

番石榴的
系列
只需要其附带类型中的一项:它们实现
可比性

但并非所有实现可比性的都有距离的概念。例如,您如何测量两个
字符串之间的距离


这就是为什么番石榴也有和;对于前者,您可以使用诸如
next()
prev()
distance()
等方法,这正是您在这里感兴趣的。番石榴的网站上有一个标记。

如果你的范围重叠,你会不止一次地计算一些时间步。你想要这个吗?你能详细说明一下吗?如果我将range.closedOpen(14,17)添加到usageTicks,此时它与rangeSet重叠,rangeSet的新状态将根本不会更改([[3-7],[12-23])。如果添加range.closedOpen(6,9),rangeSet将更改([[3-9],[12-23])),但是当进行迭代和求和时,没有什么会被多次求和?好吧,我的错,我想我不明白
RangeSet
的作用。我想象了
asRanges()
method将返回与您最初添加的相同的范围,在这种情况下,如果它们重叠,我们将得到比我们想要的更多的总和。对此感到抱歉!我感到尴尬。虽然知道DiscreteDomain(或者至少在您提到的文章中读到这一点),我从来没有看到过这些列出所有函数的文档。太棒了!还感谢大家对可比较的假设和不总是存在的距离度量(或者至少有一个必须选择像字符串的Levenshtein距离)!没有理由感到尴尬;)即使存在这些函数,使用它们毕竟是另一回事!