Как преобразовать ключ в верхний регистр при использовании потоков java 8?
- Есть список сотрудников
Employeeс 2-мя строковыми полями (имя + компания, где работает сотрудник). - Сгруппировать сотрудников по компании в
Mapструктуру, но сделать компании капсом. - Понадобится:
Stream::collectCollectors.groupingBy- Лямбда функция как первый аргумент
groupingBy String::toUpperCase
public static Map<String, List<Employee>> groupByCompaniesAsListUppercase(Collection<Employee> employees) {
return employees.stream()
.collect(Collectors.groupingBy(Employee::getCompany))
.keySet().stream()
.collect(Collectors.toMap(String::toUpperCase, s -> emptyList()));
}
Требуется вывод: {GOOGLE=[tasks.Task3_GroupBy$Employee@1d2adfbe, tasks.Task3_GroupBy$Employee@36902638], MICROSOFT=[tasks.Task3_GroupBy$Employee@223d2c72]}
Мой вывод {MICROSOFT=[], GOOGLE=[]}
Сама задача по ссылке задача task3: https://github.com/lislon/streams-assignments
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
Двойной проход с использованием Collectors.groupingBy и Collectors.toMap выглядит излишним, задачу можно горазо проще решить при одном проходе:
public static Map<String, List<Employee>> groupByCompaniesAsListUppercase(Collection<Employee> employees) {
return employees.stream()
.collect(Collectors.groupingBy(emp -> emp.getCompany().toUpperCase()));
}