Efficient Grouping of Employees by Department using Java 8’s Stream API and Collectors

To group a list of employees by their department names using Java 8, you can utilize the Stream API and the Collectors class. Here’s an example of how you can achieve this:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

class Employee {
    private String name;
    private String department;

    public Employee(String name, String department) {
        this.name = name;
        this.department = department;
    }

    public String getName() {
        return name;
    }

    public String getDepartment() {
        return department;
    }
}

public class EmployeeGroupingExample {
    public static void main(String[] args) {
        // Create a list of employees
        List<Employee> employees = new ArrayList<>();
        employees.add(new Employee("John", "Sales"));
        employees.add(new Employee("Alice", "Marketing"));
        employees.add(new Employee("Mike", "Sales"));
        employees.add(new Employee("Emma", "HR"));
        employees.add(new Employee("David", "Marketing"));
        employees.add(new Employee("Sophia", "HR"));

        // Group employees by department
        Map<String, List<Employee>> employeesByDepartment = employees.stream()
                .collect(Collectors.groupingBy(Employee::getDepartment));

        // Print the employees in each department
        for (Map.Entry<String, List<Employee>> entry : employeesByDepartment.entrySet()) {
            String department = entry.getKey();
            List<Employee> departmentEmployees = entry.getValue();
            System.out.println("Employees in department: " + department);
            for (Employee employee : departmentEmployees) {
                System.out.println("- " + employee.getName());
            }
            System.out.println();
        }
    }
}

Output:

Employees in department: HR
- Emma
- Sophia

Employees in department: Marketing
- Alice
- David

Employees in department: Sales
- John
- Mike

In the above example, we have a list of employees, and each employee has a name and a department. By using the Collectors.groupingBy method along with the Employee::getDepartment method reference, we group the employees based on their department names. The result is stored in a Map<String, List<Employee>> where the department names are the keys, and the corresponding employees are the values. Finally, we iterate over the map entries and print the employees in each department.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *