Посчитать сумму всех элементов двумерного массива используя Parallel Stream и Multithreading Java

Рейтинг: -2Ответов: 1Опубликовано: 25.03.2023

Есть метод, который считает сумму всех элементов двумерного массива:

int sum2DArray(int[][] array) {
  int sum = 0;
  for (int[] ints : array) {
      for (int number : ints) {
          sum += number;
      }
  }
  return sum;
}

Как можно переписать данный метод и увеличить производительность, чтобы посчитать сумму всех элементов двумерного массива, используя Parallel Stream и Multithreading?

Ответы

▲ 2Принят

Преобразование в параллельный поток достаточно тривиально при помощи метода BaseStream::parallel:

public static int sum2DArray(int[][] arr) {
    return Arrays.stream(arr)          // Stream<int[]> - sequential
        .parallel();                   // Stream<int[]> - parallel
        .flatMapToInt(Arrays::stream)  // IntStream - parallel
        .sum();
}

По умолчанию параллельные потоки используют ForkJoinPool::commonPool.