用数字范围填充数组

2022-09-01 01:11:22

是否有任何语法/包允许使用数字范围快速填充java数组,例如在perl中?

例如:

int[] arr = new int[1000];
arr=(1..500,301..400,1001..1400); // returns [1,2,3,4,...,500,301,302,...,400,1001,1002,...1400]

另外,它在这里是一个包,允许在上述数字列表中获取第n个数字,而无需实际创建数组(可能很大)?

例如:

BunchOfRangesType bort = new BunchOfRangesType("1..500","301..400","1001..1400");
bort.get(0); // return 1
bort.get(500); // return 301
bort.get(501); // return 302

实现起来并不难,但我想它可能很常见,所以也许已经完成了。


答案 1

对于那些仍在寻找解决方案的人:

在Java 8或更高版本中,可以使用流轻松回答这个问题,而无需任何循环或其他库。

int[] range = IntStream.rangeClosed(1, 10).toArray();

这将生成一个数组,其整数从 1 到 10。

下面是产生相同结果的更通用的解决方案。这可以通过修改一元运算符来生成任何序列。

int[] range = IntStream.iterate(1, n -> n + 1).limit(10).toArray();

答案 2

美元

// build the List 10, 11, 12, 13, 14
List<Integer> list2 = $(10, 15).toList();

专家:

<dependency>
        <groupId>org.bitbucket.dollar</groupId>
        <artifactId>dollar</artifactId>
        <version>1.0-beta3</version>
</dependency>