【问题标题】:What is the canonical way to transform a Range<T> into a List<T>?将 Range<T> 转换为 List<T> 的规范方法是什么?
【发布时间】:2016-12-05 17:30:37
【问题描述】:

有几个选项,但我不确定哪个是标准的。

  • 从下限到上限手动迭代
  • 连续集
  • 还有别的吗?

【问题讨论】:

  • @PatrickParker 它在 Google 收藏库中
  • 只要你在 Guava 世界中,并且你的范围有一个定义的域,那么 ContiguousSet 似乎是要走的路......虽然不确定你所说的“规范”是什么意思跨度>

标签: java collections guava


【解决方案1】:

这不是那么简单,但当然可以。只需创建ContiguousSet&lt;T&gt;,即ImmutableSortedSet,并使用方法asList(),例如:

Range<Integer> range = Range.closed(1, 5);
ContiguousSet<Integer> ourIntegers = ContiguousSet.create(range, DiscreteDomain.integers());
ImmutableList<Integer> ourIntegersList = ourIntegers.asList();
System.out.println(ourIntegers); // [1‥5]
System.out.println(ourIntegersList); // [1, 2, 3, 4, 5]

请注意,您可能希望坚持使用ContiguousSet(与使用列表视图相比),因为 前者实际上并不将每个元素都存储在内存中,而后者则存储,这可能是大范围的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2021-11-26
    • 2021-12-02
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多