並列に実行することができるストリームのサブセットの変換和

クラリネット奏者:

次のことを考えてみましょう:

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ベースのインデックスの要件を考慮するためです。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=375083&siteId=1