我有一个基于Guava库的Range<Date>
列表,它们从不重叠。
2001-01-10
→ 2001-01-15
2001-01-20
→ 2001-01-22
2001-01-28
→ 2001-01-29
然后,我有一个参考范围:
2001-01-01
→ 2001-01-31
我想找到列表和参考范围之间的所有独占差距:
2001-01-01
→ 2001-01-10
2001-01-15
→ 2001-01-20
2001-01-22
→ 2001-01-28
2001-01-29
→ 2001-01-31
对于此示例,Date对象很简单,但实际上它们的格式可能因ChronoUnit而异。
是否有正确的方法可以在没有太多编码的情况下获得此结果?
答案 0 :(得分:4)
我的方法就像
RangeSet<Date> rangeSet = TreeRangeSet.create();
rangeSet.add(referenceRange);
for (Range<Date> range : rangesToRemove) {
rangeSet.remove(range);
}
for (Range<Date> exclusiveRange : rangeSet.asRanges()) {
...
}
如果你正确操作范围边界,你应该以你想要的格式得到它们。
答案 1 :(得分:3)
您可以在Range<Date>
列表中create / build RangeSet并使用complement() subRangeSet(Range)来获取专属差距在您的参考范围内:
RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);