【发布时间】:2015-12-03 18:21:51
【问题描述】:
这通常是我接受来自用户的Array 的方式。我询问大小,然后循环并填充Array。
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int[] numbers = new int[N];
for (int n=0; n<N; n++){
numbers[n] = scan.nextInt();
}
我一直在尝试学习 java 8,我注意到 Random 类现在有一个创建流的方法。现在很容易用随机数声明一个 n 大小的数组。
int[] randomNumbers = new Random().ints().limit(N).toArray();
我一直在尝试做的是创建一个数组,使用流或 lambda 表达式执行类似的操作,但用于用户输入。我尝试做的是创建一个IntStream,将值映射到Scanner#nextInt,然后创建一个数组。
int[] numbers = new IntStream().map(x -> scan.nextInt()).limit(N).toArray();
我可以做的是这样的:
int[] numbers = new int[N];
Arrays.fill(numbers, 0);
numbers = Arrays.stream(numbers).map(x -> scan.nextInt()).toArray();
System.out.println(Arrays.toString(numbers));
但这仍然感觉有点多余。用一些任意数字填充数组只是为了在下一行替换它。
【问题讨论】:
-
Don’t do
.ints().limit(N)Random。使用ints(N);调用toArray()会更高效,因为它会提前知道数组大小。 -
@Holger 我没有使用
Random类。只是一个例子。不过感谢您的提醒。当我在未来的项目中使用它时会记住这一点。
标签: arrays java-8 java.util.scanner java-stream