2017-10-28 14 views
3

この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を使用して、このように書くこともできますが、それはほとんどすべての方が良いん:私はarr[i - 1] = arr[i]からarr[i] = arr[arr.length - 1]と直接最後の要素の値に割り当てること、割り当てを簡素化

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

注意。オリジナルと同じ割り当てを正確に書いておきたい場合は、範囲を逆インデックスにマッピングすることで可能です。 しかし、それは元のものよりも読むのがずっと難しくなります。 arrはその後Arrays.fillを使用すると、短くて単純になり、非空であることが保証されている場合は

:すべてのすべてで

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

、 私はあなたのストリームを使用して、すべてを書くことについてはあまり気にしなければならないとは思いません。 ストリームが自然に簡単に来るようにストリームを使用します。 「賢い」コードは優れたコードではありません。

+0

「賢い」を適切に定義すると、賢いコードが優れたコードになります。 'Arrays.fill'を使う*は巧妙です。 – Holger