Core Java

Summing Numbers with Java 8 Stream.reduce() operation

Hello. In this tutorial, we will explain the Stream.reduce method in java 8.

1. Introduction

Java 8 Stream.reduce

Before diving deep into the practice stuff let us understand the reduce() method in java8 programming.

  • Stream.reduce() – Combine the elements of a stream and produces a single result. The method accepts T identity and BinaryOperator<T> accumulator as the arguments. If the identity argument is missing (i.e. no default or initial value is given) it will return an Optional. Represented by the method – T reduce(T identity, BinaryOperator<T> accumulator)

2. Practice

Let us dive into some practice stuff from here and I am assuming that you already have the Java 1.8 or greater installed in your local machine. I am using JetBrains IntelliJ IDEA as my preferred IDE. You’re free to choose the IDE of your choice.

2.1 Model class

Create a java file in the com.java8.streams.util package and add the following code. The class will act as a model class for the creation of the employee list.

package com.java8.streams.util;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class Employee {

    private final UUID id;
    private final String name;
    private final double salary;

    private Employee(UUID id, String name, double salary) { = id; = name;
        this.salary = salary;

    public static List<Employee> createEmployees() {
        final List<Employee> employees = new ArrayList<>();

        employees.add(new Employee(UUID.randomUUID(), "John", 7500.00));
        employees.add(new Employee(UUID.randomUUID(), "Harry", 11000.50));
        employees.add(new Employee(UUID.randomUUID(), "Ethan", 9000.00));
        employees.add(new Employee(UUID.randomUUID(), "Adam", 12000.00));
        employees.add(new Employee(UUID.randomUUID(), "Deborah", 8000.00));

        return employees;

    public static Employee getMax(Employee e1, Employee e2) {
        return e1.getSalary() < e2.getSalary() ? e2 : e1;

    public UUID getId() {
        return id;

    public String getName() {
        return name;

    public double getSalary() {
        return salary;

    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", salary=" + salary +

2.2 Understanding the reduce() method

Create a java file in the com.java8.streams package and add the following code. The class will show the implementation of the reduce() method in different ways.

package com.java8.streams;

import com.java8.streams.util.Employee;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Stream.reduce() - Combine the elements of a stream and produces a single result.
Represented the method syntax as - <code>T reduce(T identity, BinaryOperator<T> accumulator);</code>
Note - If the identity argument is missing (i.e. no default or initial value is given) it will return an optional.
public class Demo {

    // driver code
    public static void main(String[] args) {
        System.out.println("----- reduce() in Java8 -----\n");

    // stream reduce
    private static void method1() {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);

        Optional<Integer> optional = integers
        System.out.println("Total without seed value  = " + optional.orElse(0));

    // stream reduce with default value
    private static void method2() {
        List<Integer> integers = Arrays.asList(6, 7, 8, 9, 10);

        int defVal = 1;
        int total = integers
                .reduce(defVal, Integer::sum);
        System.out.println("Total with seed value = " + total);

    // join collection of strings
    private static void method3() {
        List<String> strings = Arrays.asList("one", "two", "three", "four", "five");

        Optional<String> optional = strings
                .reduce((item1, item2) -> item1 + "$" + item2);
        System.out.println("Concat string = " + optional.orElse(null));

    // stream reduce with employee
    private static void method4() {
        Optional<Double> totalSalary = Employee.createEmployees()
        System.out.println("Total salary expense = " + totalSalary.orElse(0.0));

    // find maximum among employee objects
    private static void method5() {
        Optional<Employee> maxSalaryEmployee = Employee.createEmployees()
        System.out.println("Employee with maximum salary = " + maxSalaryEmployee.orElse(null));

Run the file and if everything goes well the following output will be logged in the IDE console.

Console output

----- reduce() in Java8 -----

Total without seed value  = 15

Total with seed value = 41

Concat string = one$two$three$four$five

Total salary expense = 47500.5

Employee with maximum salary = Employee{id=c7ffc659-4e9a-474d-a941-9c6e255a28ad, name='Adam', salary=12000.0}

That is all for this tutorial and I hope the article served you with whatever you were looking for. Happy Learning and do not forget to share!

3. Summary

In this tutorial, we learned the reduce() method introduced in java8 programming along with the implementation. The method is used to perform the accumulation of a stream and produce a single result. You can download the source code from the Downloads section.

4. Download the Project

This was a tutorial on learning and implementing the Stream.reduce method in java 8.

You can download the full source code of this example here: Summing Numbers with Java 8 Stream.reduce() operation

Want to know how to develop your skillset to become a Java Rockstar?

Join our newsletter to start rocking!

To get you started we give you our best selling eBooks for FREE!


1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design


and many more ....


Receive Java & Developer job alerts in your Area

I have read and agree to the terms & conditions



An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments
Back to top button