如何使用java stream创建具有固定长度和特定数字的int[]?

如何使用java stream创建具有固定长度和特定数字的int[]?,java,java-8,java-stream,Java,Java 8,Java Stream,我知道如何获得一个包含一系列数字的int[]: int[] array = IntStream.of(0, 3).toArray(); 但是我怎样才能用固定的长度和一个特定的数字得到它呢 IntStream.generate(() -> x).limit(y) 这就是你需要的。将x和y替换为您喜欢的任何数字,您将生成一个包含y大量数字x的流 显然,您可以调用到阵列或执行任何您想要的操作 使用供应商创建无限流。这里有一种方法: int[] array = IntStream.rangeC

我知道如何获得一个包含一系列数字的
int[]

int[] array = IntStream.of(0, 3).toArray();
但是我怎样才能用固定的长度和一个特定的数字得到它呢

IntStream.generate(() -> x).limit(y)
这就是你需要的。将
x
y
替换为您喜欢的任何数字,您将生成一个包含
y
大量数字
x
的流

显然,您可以调用
到阵列
或执行任何您想要的操作

使用供应商创建无限流。

这里有一种方法:

int[] array = IntStream.rangeClosed(1, n).map(x -> m).toArray();
应该生成一个长度为
n
的数组,数组中填充
m

下面的问答还有其他使用其他方法的答案,例如
Arrays.fill
方法


或者更简单的API,它是为此编写的:

int[] arr = new int[10];
Arrays.setAll(arr, x -> 1);

// or if you have enough data for parallel to make any difference
Arrays.parallelSetAll(arr, x -> 1);
或者再简单一点

// n elements of value m
int[]a=new int[n];
Arrays.fill(a,m);

如果希望该值是索引的函数,则此方法非常有效。我使用较短的
IntStream.range(0,n)
+1@PeterLawrey@Eugene以什么方式?@a在一个简单的调用上使用
限制
(不引入
大小
标志)挖掘一个无限流来生成一个数组?@Eugene IMHO我甚至不会在这个阶段进行研究,除非另有说明,否则会发现性能瓶颈。这种方法更简洁易读。@Aomine可能对你更具可读性,而不是我。或者甚至@PeterLawrey我只是想编辑一下,但为时已晚,我想你最好不要所有元素都是一样的。哪一个内部只不过是一个循环…@Eugene哪一个答案不是一个内部循环?除此之外,如果我必须打赌JVM对哪个版本进行了最佳优化,即有可能消除初始零填充和最快的内存填充操作,我会打赌这一个。@Holger我绝对诚实地考虑过这个零填充,甚至认为在这种情况下(也可能是其他情况),这种情况不需要发生,但一旦你声明了一个数组,它将总是以零作为前缀,我不认为VM可以消除这一点,至少我不知道如何证明that@Eugene如中所述,当数组创建之后紧接着执行覆盖复制操作时,JVM能够消除零化。我希望接下来的
fill
手术也能得到类似的治疗。在这里看到的所有其他版本都需要内联几个其他代码,以确定结果是否会真正覆盖整个数组而不读取任何字段,并且不能在中间失败。“霍格尔漂亮!非常感谢。顺便说一句,链接dupe中还提供了java流解决方案。