2014-10-27 76 views
0

我在一个Java 8应用程序来处理时间戳(Long)列表的列表:库处理范围

如果用户增加了一个新的范围,应当与其他现有范围合并,就像这个伪代码:

rangeList = [100, 200], [300, 400], [500, 600], [700, 800] 
newRangeList = rangeList.add([150, 550]) 
println(newRangeList)  // Expected output: [100, 600], [700, 800] 

我尝试使用的Google Guava Range class一个List但新的时间戳范围变得出奇的复杂融合在一起。

从Java 8中使用新的LongStream而不是Range类对我没有帮助。

我认为Interval Tree将是一个很好的数据结构来处理合并效率,但我没有发现实现这一点的库。

是否有一个用于处理数字范围和合并的库?

回答

4

从你想要达到的目标来看,既然你提到使用番石榴的范围,番石榴已经有了你想要的东西:一个RangeSet

该接口的Javadoc规定:

[...]被要求选择支持add(范围)操作实现忽略空的范围和聚结连接范围

它是一个接口;您可能希望使用TreeRangeSet用于您的目的:

// for whatever type C... 
final RangeSet<C> rangeSet = TreeRangeSet.create();