【问题标题】:Range union with Google Guava与 Google Guava 的范围联合
【发布时间】:2019-05-18 14:57:11
【问题描述】:

我正在编写一些需要处理数字范围的代码。我正在使用 Google Guava 库;我需要一些基本的操作,比如联合和交集。

查看谷歌番石榴文档,范围之间的交集可以很容易地使用 range.intersection(range) 方法,但我找不到任何联合方法;唯一可行的选择似乎是使用 RangeSet 类,但它会带来更多问题:例如,滚动 RangeSet 中的每个范围不是很直观...

有没有办法使用 Google Guava 或其他库来合并集合?

如果有更好/更直观的选择,即使更改库也可以。

【问题讨论】:

    标签: java range guava intervals


    【解决方案1】:

    span 将合并两个相互接触的范围。

    在任何其他情况下,您都必须使用RangeSet,尽管我不太清楚它有什么不直观的地方。

    【讨论】:

    • 如果我尝试使用 RangeSet 类,相交和跨度函数使用 Range 作为输入,而不是 RangeSet。这意味着如果我想处理两个具有交集或联合的范围集,我应该处理其中一个范围集中的每个范围(而另一个 RangeSet 将用于调用该函数);我在文档中找不到这样的方法(展开 rangeSet 的方法)。例如,对我来说,拥有 Rangeset.intersect(otherRangeset) 方法会很直观。
    • 要获得两个RangeSets 的联合,请致电rangeSet1.addAll(rangeSet2)。要与两个 RangeSets 相交,请致电 rangeSet1.removeAll(rangeSet2.complement())。要迭代 RangeSet,请调用 asSetOfRanges() 以获取 Set,您可以正常迭代。通常,它基于 Map 和 Set 等类公开的 API,例如Map 要求您让 entrySet 对其进行迭代。
    • 感谢您的帮助。我知道 API 的设计目的很明确,在这种情况下类似于 Map/Set 类,但我一直在寻找一种更“特定目的”的方法。不过,我会尝试根据您给我的建议重写我的代码。
    猜你喜欢
    • 2016-02-22
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多