Java 8 Sum: Array, Map and List Collection Example using reduce() and collect() Method
September 08, 2016
On this page we will provide Java 8 sum of values of Array, Map and List collection example using reduce() and collect() method. There are various ways to calculate the sum of values in java 8. We can use IntStream.sum()
. We can get sum from summary statistics. We can also create our own method to get the sum. We will discuss here different ways to calculate the sum.
Contents
- Sum using IntStream.sum()
- Sum using Collectors.summingInt() with Stream.collect()
- Sum using Collectors.summarizingInt() with Stream.collect() and IntSummaryStatistics
- Sum using Stream.reduce() with BiFunction and BinaryOperator
- Sum using Stream.reduce() with Custom Method
- Sum of Array Example
- Sum of List Example
- Sum of List of Array Example
- Sum of Map Example
Sum using IntStream.sum()
To get the sum of values we can useIntStream.sum()
as follows for integer data type.
int sum = map.values().stream().mapToInt(i->i).sum(); int sum = list.stream().map(Line::getLength).mapToInt(Integer::intValue).sum();
long
data type, there is LongStream
and for double
data type there is DoubleStream
in java 8.
Sum using Collectors.summingInt() with Stream.collect()
To get the sum of values we can useCollectors.summingInt()
with Stream.collect()
for integer data type.
int sum = list.stream().map(Line::getLength).collect(Collectors.summingInt(i->i));
long
data type, there is summingLong
and for double
data type there is summingDouble
in java 8.
Sum using Collectors.summarizingInt() with Stream.collect() and IntSummaryStatistics
To get the sum of values we can useCollectors.summarizingInt()
with Stream.collect()
and IntSummaryStatistics
.
IntSummaryStatistics stats = list.stream() .collect(Collectors.summarizingInt(Line::getLength)); IntSummaryStatistics stats = list.stream().flatMap(a->Arrays.stream(a)) .collect(Collectors.summarizingInt(i->i)); System.out.println(stats.getSum());
long
data type, we use summingLong
with LongSummaryStatistics
and for double
data type there is summingDouble
with DoubleSummaryStatistics
in java 8.
Here
Line
is our custom class.
Line.java
package com.concretepage; public class Line { private int length; public Line(int length) { this.length = length; } public int getLength() { return length; } }
Sum using Stream.reduce() with BiFunction and BinaryOperator
To get the sum of values we can useStream.reduce()
with BiFunction
as accumulator and BinaryOperator
as combiner in parallel processing.
int sum = list.parallelStream().reduce(0, (output, ob) -> output + ob.getLength(), (a, b) -> a + b);
BinaryOperator
to each and every element of stream. If identity is 0, then it results into the sum of elements of stream in our example.
Sum using Stream.reduce() with Custom Method
To perform addition we can also use our custom method withStream.reduce()
as follows.
int sum = Arrays.stream(array).reduce(0, StatisticsUtility::addIntData);
StatisticsUtility
is our custom class.
StatisticsUtility.java
package com.concretepage; public class StatisticsUtility { public static int addIntData(int num1, int num2) { return num1 + num2; } }
int sum = Arrays.stream(array).reduce(0, Integer::sum);
Sum of Array Example
SumOfArrayDemo.java
package com.concretepage; import java.util.Arrays; import java.util.function.IntBinaryOperator; public class SumOfArrayDemo { public static void main(String[] args) { int[] array = {23,43,56,97,32}; System.out.println("--Using IntStream.sum()--"); int sum = Arrays.stream(array).sum(); System.out.println(sum); System.out.println("--Using Stream.reduce() with IntBinaryOperator--"); IntBinaryOperator ibop = (x,y) -> x+y; sum = Arrays.stream(array).reduce(0, ibop); System.out.println(sum); System.out.println("--Using Stream.reduce() with Integer.sum()--"); sum = Arrays.stream(array).reduce(0, Integer::sum); System.out.println(sum); System.out.println("--Using custom method--"); sum = Arrays.stream(array).reduce(0, StatisticsUtility::addIntData); System.out.println(sum); } }
--Using IntStream.sum()-- 251 --Using Stream.reduce() with IntBinaryOperator-- 251 --Using Stream.reduce() with Integer.sum()-- 251 --Using custom method-- 251
Sum of List Example
SumOfListDemo.java
package com.concretepage; import java.util.ArrayList; import java.util.IntSummaryStatistics; import java.util.List; import java.util.stream.Collectors; public class SumOfListDemo { public static void main(String[] args) { List<Line> list = new ArrayList<>(); list.add(new Line(213)); list.add(new Line(233)); list.add(new Line(243)); list.add(new Line(253)); System.out.println("--Using IntStream.sum()--"); int sum = list.stream().map(Line::getLength).mapToInt(Integer::intValue).sum(); System.out.println(sum); System.out.println("--Using Collectors.summingInt()--"); sum = list.stream().map(Line::getLength).collect(Collectors.summingInt(i->i)); System.out.println(sum); System.out.println("--Using summarizingInt()--"); IntSummaryStatistics stats = list.stream() .collect(Collectors.summarizingInt(Line::getLength)); System.out.println(stats.getSum()); System.out.println("--Using Stream.reduce() with combiner--"); sum = list.parallelStream().reduce(0, (output, ob) -> output + ob.getLength(), (a, b) -> a + b); System.out.println(sum); } }
--Using IntStream.sum()-- 942 --Using Collectors.summingInt()-- 942 --Using summarizingInt()-- 942 --Using Stream.reduce() with combiner-- 942
Sum of List of Array Example
SumOfListOfArrayDemo.java
package com.concretepage; import java.util.ArrayList; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.stream.Collectors; public class SumOfListOfArrayDemo { public static void main(String[] args) { List<Integer[]> list = new ArrayList<>(); Integer[] a1 = {6,3,8,12}; list.add(a1); Integer[] a2 = {8,13,9,22}; list.add(a2); System.out.println("--Using Collectors.summingInt()--"); int sum = list.stream().flatMap(a->Arrays.stream(a)). collect(Collectors.summingInt(i->i)); System.out.println(sum); System.out.println("--Using Collectors.summarizingInt()--"); IntSummaryStatistics stats = list.stream().flatMap(a->Arrays.stream(a)) .collect(Collectors.summarizingInt(i->i)); System.out.println(stats.getSum()); System.out.println("--Using IntStream.sum()--"); sum = list.stream().flatMap(a->Arrays.stream(a)). mapToInt(Integer::intValue).sum(); System.out.println(sum); } }
--Using Collectors.summingInt()-- 81 --Using Collectors.summarizingInt()-- 81 --Using IntStream.sum()-- 81
Sum of Map Example
SumOfMapValues.java
package com.concretepage; import java.util.HashMap; import java.util.IntSummaryStatistics; import java.util.Map; import java.util.stream.Collectors; public class SumOfMapValues { public static void main(String[] args) { Map<Integer, Integer> map = new HashMap<>(); map.put(1, 12); map.put(2, 24); map.put(3, 10); System.out.println("--Using IntStream.sum()--"); int sum = map.values().stream().mapToInt(i->i).sum(); System.out.println(sum); System.out.println("--Using BinaryOperator--"); sum = map.values().stream().reduce(0, Integer::sum); System.out.println(sum); System.out.println("--Using Collectors.summingInt()--"); sum = map.values().stream().collect(Collectors.summingInt(i->i)); System.out.println(sum); System.out.println("--Using Collectors.summarizingInt()--"); IntSummaryStatistics stats = map.values().stream().collect(Collectors.summarizingInt(i->i)); System.out.println(stats.getSum()); System.out.println("--Using custom method--"); sum = map.values().stream().reduce(0, StatisticsUtility::addIntData); System.out.println(sum); } }
--Using IntStream.sum()-- 46 --Using BinaryOperator-- 46 --Using Collectors.summingInt()-- 46 --Using Collectors.summarizingInt()-- 46 --Using custom method-- 46