Примите во внимание следующее:
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
, за исключением использования параллельного потока?