HOWTO · Java

Obtenha a soma de um array em Java

Aprenda a encontrar a soma de um array em Java usando loops e streams.

Nesta página

Para somar um int[] em Java, use Arrays.stream(numbers).sum() como opção concisa integrada à linguagem ou some cada valor com um loop for quando quiser controlar cada etapa. Arrays em Java não têm um método de instância sum(); Arrays.stream(int[]) transforma os valores em um IntStream, que oferece sum() e reduce().
Somar um array é uma das operações de dados essenciais do Tutorial de Java, que ordena os guias de arrays e coleções dos fundamentos aos streams.

Os exemplos abaixo usam os mesmos seis valores, cuja soma é 149. Cada programa é independente e pode ser salvo como SimpleTesting.java.

Somar um array int[] com um loop for

Um loop comum deixa cada etapa explícita: inicialize o acumulador, percorra cada índice e some o elemento correspondente. É uma opção simples quando você quer acompanhar o cálculo ou incluir outra lógica durante a iteração.

Este programa soma os seis valores de numbers e imprime o total. A condição do loop usa numbers.length, e o nome do array é usado de forma consistente para obter seu comprimento e acessar seus elementos.

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = 0;

    for (int i = 0; i < numbers.length; i++) {
      total += numbers[i];
    }

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Somar um array int[] com um stream paralelo e reduce

Chame parallel() no IntStream retornado por Arrays.stream(numbers) para usar um stream paralelo. O reduce de dois argumentos recebe um valor de identidade (0) e uma operação de adição. Como a adição é associativa, os subtotais podem ser combinados para produzir o mesmo resultado. Para um array pequeno, prefira a versão sequencial, a menos que o processamento paralelo seja adequado à carga de trabalho ao redor; a execução paralela não torna automaticamente mais rápido um cálculo pequeno.

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = Arrays.stream(numbers)
        .parallel()
        .reduce(0, (left, right) -> left + right);

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Somar um array int[] com Arrays.stream(...).reduce(...)

Em um stream sequencial, omita parallel(). Arrays.stream(int[]) ainda retorna um IntStream; reduce(0, Integer::sum) começa com o valor de identidade e combina cada valor primitivo por meio da adição. O valor de identidade mantém a operação bem definida quando não há valores para combinar.

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = Arrays.stream(numbers).reduce(0, Integer::sum);

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Somar um array int[] com Arrays.stream(...).sum()

Quando a operação é uma adição, sum() expressa a intenção de forma mais direta do que uma redução. Esse método terminal do IntStream criado a partir do array retorna um total do tipo int.

Como esse método retorna int, o total usa a aritmética de inteiros de 32 bits do Java. Se a soma matemática puder ultrapassar o intervalo de int, converta o stream para um tipo mais amplo antes de somar, por exemplo com Arrays.stream(numbers).asLongStream().sum(). Para lidar com esse intervalo em um loop comum, também é necessário usar um acumulador long e converter os valores para esse tipo.

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = Arrays.stream(numbers).sum();

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Somar um array int[] com IntStream.of(...).sum()

IntStream.of(numbers) é outra forma direta de criar um IntStream a partir de um int[]. Sua operação sum() retorna o mesmo total que Arrays.stream(numbers).sum(). Escolha a forma que fique mais natural no seu código.

import java.util.stream.IntStream;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = IntStream.of(numbers).sum();

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Somar um array int[] com um loop for compacto

O loop abaixo reúne a inicialização, a condição de continuação e a acumulação no cabeçalho do for; em seguida, percorre o array do último índice ao primeiro. É Java válido, mas o corpo vazio e a decrementação na expressão de atualização tornam o código mais difícil de ler do que o loop comum. Prefira a forma mais clara, a menos que a concisão seja especialmente útil.

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total;
    int i;

    for (total = 0, i = numbers.length - 1;
         i >= 0;
         total += numbers[i--]) {
      // Accumulation happens in the loop update expression.
    }

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149