【发布时间】:2014-05-09 00:33:54
【问题描述】:
我渴望在我的程序中使用 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
是否有任何理由反对以下内容:
Set<Range<Integer>> setOfRanges = usageTicks.asRanges();
int sum = 0;
for(Range<Integer> range : setOfRanges)
sum += (range.upperEndpoint() - range.lowerEndpoint());
【问题讨论】:
-
如果您的范围重叠,则表示您计算了多次时间步长。你想要这个吗?
-
你能详细说明一下吗?如果我将范围 Range.closedOpen(14,17) 添加到 useTicks,此时与 rangeSet 重叠,则 rangeSet 的新状态根本不会改变 ([[3?7), [12?23)] )。如果添加 Range.closedOpen(6,9),rangeSet 会发生变化 ([[3?9), [12?23)]),但是在迭代和求和的时候,什么都不求和?
-
好吧,我的错,我想我不明白
RangeSet做了什么。我想象asRanges()方法将返回您最初添加的相同范围,在这种情况下,如果它们重叠,我们将求和超过我们想要的。很抱歉!
标签: java range guava intervals