2
我有一個雙精度數組,我想從另一個數組中依次賦值0..n。例如:r[0] = sum(a[0..n]), r[1] = sum(a[1..n]), r[m] = sum(a[m..n]) where m <= n
等用Java 8數據流以函數方式生成一個數組的連續和
這是容易做到與循環:
int n = a.length;
for (int i = 0; i < n; i++) {
double sum = 0.;
for (int j = i; j < n; j++)
sum += a[j];
r[i] = sum;
}
有一個靈活的方式以功能性方式來做到這一點在Java中8流?隨着庫StreamEx我可以像親近:
for (int i = 0; i < n; i++)
r[i] = DoubleStreamEx.of(a).skip(i).sum();
我真的不關心性能,這是更多的練習,以瞭解流。
'n <= a.length'? – shmosel
*「這對於循環來說是微不足道的」*可能微不足道,但你仍然設法做得不好(_O(n^2)_)。該操作可以通過一個循環完成(_O(n)_)。要使用流進行此操作,您需要一個自定義的「收集器」,而且它遠離最佳性能。使用'for'循環可以很容易地實現最佳性能(即使您設法搞砸了它也很容易),那麼爲什麼要使用次循環代碼,當一個for循環會執行? – Andreas
正如我所說的,我不關心性能 – skippy