Skip to main content

How do I sum a list of integers

In this Q&A, we'll go over options provided by the Java stream APIs to sum a list of integers.

Options are:
  1. Using Collectors class.  Collectors.summingInt method provides ability to sum a stream of integers. Long and double streams can be summed using summingToLong and summingToDouble methods 
  2. Using IntStream class.  IntStream.sum method provides ability to sum integers. LongStream and DoubleStream classes provide the ability the sum long and double values
  3. Using Stream.reduce and Integer::sum.   Stream.reduce method provides the option to sum with or without a seed value
Please note that options# 1 and 2 return an int. Stream.reduce returns an Optional when seed value is not provided.

In addition to sum, Collectors class provides methods to calculate average and count elements in a stream.

See demo code below:
List<Integer> l = Arrays.asList(1,2,3,4,5,6);
List<Integer> l1 = new ArrayList<>();
// use collectors to sum integers
int s = l.stream().collect(Collectors.summingInt(Integer::intValue));
assertEquals("sum equals", 21, s);
// returns 0 for empty list
int s1 = l1.stream().collect(Collectors.summingInt(Integer::intValue));
assertEquals("sum equals", 0, s1);

// use IntStream to sum
s = l.stream().mapToInt(Integer::intValue).sum();
assertEquals("sum equals", 21, s);

// use stream.reduce to sum
// returns optional.  get int value from optional
s = l.stream().reduce(Integer::sum).orElse(0);
assertEquals("sum equals", 21, s);
// provide seed value.  returns int instead of Optional
s = l1.stream().reduce(0, Integer::sum);
assertEquals("sum equals", 0, s);

Comments