2017-10-28 35 views
3

this for循環迭代int數組。它將(index-1)的值更改爲當前索引的值。所以結果應該是,所有元素必須等於最後一個元素的值。如何將舊的for循環更改爲IntStream?

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

如何將這個舊的for循環更改爲Java 8中的IntStream,以使其更加現代。

回答

7

你可以這樣寫使用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]); 

總而言之, 我不認爲你應該太擔心寫的用流的一切。 使用溪流,他們來自然而又輕鬆。 「聰明」的代碼並不是更好的代碼。

+0

聰明的代碼是更好的代碼,如果你適當地定義「聰明」。使用'Arrays.fill' *是聰明的。 – Holger