【问题标题】:Library for handling a List of Ranges用于处理范围列表的库
【发布时间】:2023-03-21 17:08:01
【问题描述】:

我必须在 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 将是一个很好的数据结构来处理高效的合并,但我发现没有实现这一点的库。

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

【问题讨论】:

    标签: java numbers range guava date-range


    【解决方案1】:

    从您想要实现的目标,并且由于您提到使用 Guava 的 Range,Guava 已经拥有您想要的:RangeSet

    此接口的 javadoc 指定:

    [...]选择支持 add(Range) 操作的实现需要忽略空范围并合并连接的范围

    它是一个接口;您可能想使用TreeRangeSet 来达到您的目的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多