使用连续的整数范围填充List

jgm*_*jgm 38 java guava

我想要一个包含1到500范围内整数的列表.是否有一些方法可以使用Guava(或简单的Java)创建此列表,而无需遍历范围并在我自己的范围内单独添加值码?

解析度

解决方案如下(在这里发布,因为一些答案提供了正确的信息,但没有一个给出完整的解决方案):

__PRE__

结果是类型 __CODE__

Nor*_*wap 96

新的Java 8方式:

List<Integer> range = IntStream.range(0, 500).boxed().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 使用 Java 16,您可以使其变得更短: `IntStream.range(1, 501).boxed().toList()` (5认同)
  • 这很酷; 但是,你没有收到强制转换警告/编译器错误? (2认同)

pca*_*cao 14

使用Guava,您可以使用Range:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html

当然,代码中仍然会有循环,但为了简单起见,它们可能只是隐藏在代码中.

例如:

Range<Integer> yourValues = Range.closed(1, 500);
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请访问http://code.google.com/p/guava-libraries/wiki/RangesExplained.

请记住,如果您确实需要最终迭代Range,则不能直接执行,只能通过使用DiscreteDomains.integers().

  • 谢谢,这指向了我正确的方向.我需要的最终代码是ImmutableList.copyOf(ContiguousSet.create(Range.closed(1,500),DiscreteDomain.integers())) (2认同)
  • @jgm你不必执行`ImmutableList`副本,因为`ContiguousSet`已经是一个不可变的集合(`ImmutableSortedSet`),它有`asLst()`方法返回`ImmutableList`视图. (2认同)