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

这个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];
}

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

解决方法

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

IntStream.range(0,arr.length - 1).forEach(i -> arr[i] = arr[arr.length - 1]);

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

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

Arrays.fill(arr,arr[arr.length - 1]);

总而言之,我不认为你应该过分担心使用流写一切.在自然而轻松的地方使用溪流.“聪明”代码不是更好的代码.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...