クラリネット奏者:
次のことを考えてみましょう:
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.DoubleStream;
public class Test {
public static double sum(double[] x, int i, int L) {
double s = 0;
int hi = i + L;
while (i < hi) {
s += x[i - 1];
i++;
}
return s;
}
/*public static double streamSum(double[] x, int i, int L) {
return IntStream.range(0, x.length)
.parallel()
.filter(j -> (j < i + L))
.mapToObj(j -> x[j - 1])
.sum();
}*/
public static void main(String[] argv) {
double[] x = {1, 2, 3, 4};
System.out.println(sum(x, 1, 3));
}
}
sum
上記配列取るx
- (それがそのようにする必要があり、なぜ、質問しない1-インデックスに基づいて)開始インデックスを取り、をi
し、長さのサブセットを取得L
サブセットを合計すると、。例が与えられているmain
上記。
どうすれば修正すればstreamSum
、私は同じ出力を得るように上記のsum
並列ストリームを使用することを除いて?
WJS:
あなたは長さLあなたのために私から始まるサブ配列はこのようにそれを行う必要があります合計したかったと述べました。
double r = IntStream.range(i, L+i)
.parallel()
.mapToDouble(id -> x[id-1])
.sum();
System.out.println(r);
1を減算する理由は、1ベースのインデックスの要件を考慮するためです。