2015-12-28 18 views
0

我有一個基於番石榴庫的Range<Date>列表,它們從不重疊。從範圍列表中提取差距<Date>

  • 2001-01-10&rightarrow;2001-01-15
  • 2001-01-20&rightarrow;2001-01-22
  • 2001-01-28&rightarrow;2001-01-29

然後,我有一個參考範圍:

  • 2001-01-01&RIGHTARROW;2001-01-31

我想找到所有的獨家清單和參考範圍之間的差距:

  • 2001-01-01&RIGHTARROW;2001-01-10
  • 2001-01-15&rightarrow;2001-01-20
  • 2001-01-22&rightarrow;2001-01-28
  • 2001-01-29&rightarrow;2001-01-31

在這個例子中,Date對象是簡單的,但在現實中,他們可能會在格式上取決於其ChronoUnit變化。

有沒有正確的方法來得到這個結果沒有太多的編碼?

+0

可以在列表中的重疊範圍? – azurefrog

+0

不,我在添加它們時合併它們,所以輸入列表是乾淨的。 –

+0

僅供參考:Guava的TreeRangeSet可以爲您合併/合併它們。有關詳細信息,請參閱https://github.com/google/guava/wiki/NewCollectionTypesExplained#rangeset。 – mfulton26

回答

4

我的做法會是這樣的

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

如果你正確地處理域範圍,你應該讓他們在你想要的格式。

+0

非常感謝。我完全忽略了RangeSet對象。 –