从范围列表中提取间隙<Date>

Extract gaps from a List of Range<Date>

我有一个基于 Guava 库的 Range<Date> 列表,它们从不重叠。

那么,我有一个参考范围:

我要找出所有独家列表和参考范围之间的差距:

在这个例子中,Date 对象很简单,但实际上它们的格式可能会因 ChronoUnit 而异。

有没有不用太多编码就能得到这个结果的正确方法?

我的方法类似于

RangeSet<Date> rangeSet = TreeRangeSet.create();
rangeSet.add(referenceRange);
for (Range<Date> range : rangesToRemove) {
  rangeSet.remove(range);
}
for (Range<Date> exclusiveRange : rangeSet.asRanges()) {
   ...
}

如果您正确操作范围界限,您应该以您想要的格式获取它们。

您可以create/build a RangeSet from your list of Range<Date> and use its complement() with subRangeSet(Range)获取您参考范围内的独家差距:

RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);