如何将旧的for循环更改为IntStream?

Pak*_*ert 3 java java-stream

这个for循环遍历int数组.它将(index-1)的值更改为当前索引的值.所以结果应该是,所有元素必须等于最后一个元素的值.

int arr[] = {8, 5, 15, 23, 1, 7};
for (int i = arr.length - 1; i > 0; i--) {
    arr[i - 1] = arr[i];
}
Run Code Online (Sandbox Code Playgroud)

如何在Java 8中将这个旧的for循环更改为IntStream,使其变得现代化.

Sto*_*ica 7

你可以这样写IntStream,但它几乎没有更好:

IntStream.range(0, arr.length - 1).forEach(i -> arr[i] = arr[arr.length - 1]);
Run Code Online (Sandbox Code Playgroud)

请注意,我简化了赋值,arr[i - 1] = arr[i]直接分配给最后一个元素的值arr[i] = arr[arr.length - 1].如果你想编写与原始版本完全相同的赋值,可以通过将范围映射到反向索引来实现,但这比原始版本更难阅读.

如果arr保证非空,那么使用Arrays.fill会更短更简单:

Arrays.fill(arr, arr[arr.length - 1]);
Run Code Online (Sandbox Code Playgroud)

总而言之,我认为您不应该过分担心使用流编写所有内容.在自然而轻松的地方使用溪流."聪明"代码不是更好的代码.