没有"尺寸"的概念在番石榴的RangeSet / Range?

时间:2014-03-29 13:20:31

标签: java range guava intervals

我渴望在我的程序中使用 Guava的RangeSets 。尽管添加和合并范围的功能,我也对" size"我的范围

一些评论:

  • 没有我感兴趣的范围是无限的!
  • 我使用的所有范围都是绑定类型" 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

是否有任何理由反对以下内容:

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

1 个答案:

答案 0 :(得分:6)

Guava的Range只需要一个附带类型的东西:它们实现Comparable

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

这就是为什么Guava还有DiscreteDomainContiguousSet;对于前者,您有next()prev()distance()等方法,这是您感兴趣的方法。 Guava的网站上有一个article