【发布时间】:2018-10-06 07:40:40
【问题描述】:
我知道如何获得带有一系列数字的int[]:
int[] array = IntStream.of(0, 3).toArray();
但是我怎样才能得到它的固定长度和一个特定的数字呢?
【问题讨论】:
-
顺便说一句,链接的欺骗中还提供了一个 java-stream 解决方案。
标签: java java-8 java-stream
我知道如何获得带有一系列数字的int[]:
int[] array = IntStream.of(0, 3).toArray();
但是我怎样才能得到它的固定长度和一个特定的数字呢?
【问题讨论】:
标签: java java-8 java-stream
IntStream.generate(() -> x).limit(y)
是你需要的。将x 和y 替换为您喜欢的任何数字,您将生成一个包含y 很多数字x 的流。
你显然可以打电话给toArray 或做任何你想做的操作。
IntStream.generate 使用供应商创建无限流。
【讨论】:
limit 的无限流(不引入SIZED 标志)在那个更简单的调用just 上生成一个数组?
这是一种方法:
int[] array = IntStream.rangeClosed(1, n).map(x -> m).toArray();
应该产生一个长度为n的数组,其中填充了m。
下面的问答有其他使用其他方法的答案,例如Arrays.fill方法。
【讨论】:
IntStream.range(0, n)。 ;) +1
或者再简单一点。
// n elements of value m
int[]a=new int[n];
Arrays.fill(a,m);
【讨论】:
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);
【讨论】: