Streams: groupingBy with mapping into a sorted Set

A downstream mapping collector transforms each group's elements before they are gathered - here into a de-duplicated, sorted set of names per department.

Code
record Employee(String dept, String name) {}
var staff = List.of(new Employee("eng", "Ava"), new Employee("eng", "Ben"),
                    new Employee("eng", "Ava"), new Employee("ops", "Cara"));

Map<String, Set<String>> namesByDept = staff.stream().collect(
        Collectors.groupingBy(Employee::dept, TreeMap::new,
                Collectors.mapping(Employee::name, Collectors.toCollection(TreeSet::new))));

System.out.println(namesByDept);
Output
{eng=[Ava, Ben], ops=[Cara]}
Advertisement

Run this yourself in the Online Java Compiler, spin up a live REST API in the API Sandbox, or practise with Java interview questions.

Published 2026-07-30