У меня есть функция, которая возвращает Map<String, Set<String>>
, код перед Java 8:
Map<String, Set<String>> degreeMap = new HashMap<>();
for(Course course : courses){
Set<String> cList = degreeMap.get(course.getCourseLevel().toString());
if(Objects.nonNull(cList)){
cList.addAll(course.getMasterDegree()); //this is what i want to append to the old set
degreeMap.put(course.getCourseLevel().toString(), cList);
} else{
degreeMap.put(course.getCourseLevel().toString(), new HashSet<>(course.getMasterDegree()));
}
}
return degreeMap;
, которые возвращают карту уровня курса -> набор степеней.
Например, он читаетвсе курсы и возвращают карту типа:
{"undergraduate" : ["BTech", "BSc", "BE"],
"masters": ["MTech", "MBA"],
"Executive": ["PGDBM", "EECP"]}
Вот мой курс:
public class Course {
private List<String> masterDegree;
private CourseLevel courseLevel;
}
Но я хочу написать этот фрагмент кода в стиле Java 8.Для этого я попробовал это:
Map<String, Set<String>> degreeMap = courses.stream().collect(
Collectors.groupingBy(c -> c.getCourseLevel().toString(),
Collectors.mapping(c -> c.getMasterDegree(), Collectors.toSet()))
);
, который не работает, и я получаю следующую ошибку во время компиляции:
нет экземпляров типа переменнойсуществуют для того, чтобы List соответствовал строковой переменной вывода T и имел несовместимые границы: ограничения равенства: нижние границы строк: список
Есть предложения, как этого добиться?