gpt4 book ai didi

arrays - 使用扫描器创建流

转载 作者:行者123 更新时间:2023-12-02 08:23:59 25 4
gpt4 key购买 nike

这通常是我从用户那里接受 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));

但这仍然感觉有点多余。用一些任意数字填充数组只是为了在下一行替换它。

最佳答案

由于 way, the current implementation handles limit(…)s , 使用以下方法创建流更有效:

IntStream.range(0, N).map(i -> scan.nextInt())

尽管使用 range 操作创建了一个未使用的值,但在使用 toArray() 以及并行处理时效率会更高。此外,这会创建一个 ordered stream哪个maintains the element order .

所以在使用的时候,

int[] numbers = IntStream.range(0, N).map(i -> scan.nextInt()).toArray();

它受益于提前知道数组大小。

关于arrays - 使用扫描器创建流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com