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

标签 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];
}

如何在 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 - 如何将旧的 for 循环更改为 IntStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988559/

相关文章:

java - Android Activity ASyncTask 和 onCancelled

java - 调用 Exception.printStackTrace 时出现 AbstractMethodError

java - 如何从 JavaFX 11 项目构建真正的桌面可执行应用程序?

java - lambda 表达式中的错误返回类型 : BigDecimal cannot be converted to long

java-8 - 为什么 Java8 Stream 不生成任何内容?

java - next() 和 nextLine() 都无法帮助存储带有空格的名称

java - 某些功能不适用于 Tomcat 服务器

Java 8 流 + 映射 + ForEach + 收集

java - 根据结果​​数据组合两个列表以在 java 8 中创建一个新列表

java - "method stream() is undefined for the type Set<Person>"