Assume an Employee
class:
public class Employee { private String name; private String department; // constructor, getters public Employee(String name, String department) { this.name = name; this.department = department; } public String getName() { return name; } public String getDepartment() { return department; } }
And a list of employees:
List<Employee> employees = Arrays.asList( new Employee("Alice", "HR"), new Employee("Bob", "IT"), new Employee("Charlie", "IT"), new Employee("David", "HR") );
Using Collectors.groupingBy
Map<String, List<Employee>> employeesByDept = employees.stream() .collect(Collectors.groupingBy(Employee::getDepartment)); employeesByDept.forEach((dept, emps) -> { System.out.println(dept + ": " + emps.stream() .map(Employee::getName) .collect(Collectors.joining(", "))); });