import static java.util.stream.Collectors.averagingInt; import static java.util.stream.Collectors.groupingBy; import java.util.Arrays; import java.util.List; import java.util.TreeMap; public class GroupingByTest { public static void main(String[] args) { List employees = Arrays.asList( new Employee(1, 30, "Emp1"), new Employee(1, 30, "Emp2"), new Employee(2, 20, "Emp3"), new Employee(3, 40, "Emp4"), new Employee(3, 30, "Emp5"), new Employee(4, 30, "Emp6"), new Employee(4, 20, "Emp7"), new Employee(4, 20, "Emp8")); employees .stream() .collect(groupingBy( Employee::getDepartment, () -> { TreeMap map = new TreeMap<>(); map.put(1, 0.0); map.put(2, 0.0); map.put(3, 0.0); map.put(4, 0.0); map.put(5, 0.0); return map; }, averagingInt(Employee::getAge))); } } class Employee { private Integer department; private Integer age; private String name; public Employee(Integer department, Integer age, String name) { this.department = department; this.age = age; this.name = name; } public Integer getDepartment() { return department; } public Integer getAge() { return age; } public String getName() { return name; } }