In this Q&A, we'll go over options provided by the Java stream APIs to sum a list of integers.
Options are:
- 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
- Using IntStream class. IntStream.sum method provides ability to sum integers. LongStream and DoubleStream classes provide the ability the sum long and double values
- 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.
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
Post a Comment