Потоки Java — получение карты из списка карт

#java #class #functional-programming #java-stream

#java #класс #функциональное программирование #java-stream

Вопрос:

У меня есть класс University, который содержит (среди прочего) список семестров и метод: public Map<String,Integer> gradesMap(Student s,Semester s) который должен возвращать карту оценок для данного учащегося в данном семестре. Классы, семестр и курс выглядят примерно так:

 public class Semester{
...
private List<Course> courses;
public List<Courses> getCourses(){return courses;}
...
}

public class Course{
...
String courseName;
private Map<Student,Integer> courseGrades;

public Map<Student,Integer> getCourseGrades(){return courseGrades;}
public String getCourseName(){return courseName;}
...
}
 

Я попытался написать что-то вроде:

 Map<String,Integer> grades=semester.getCourses().stream().
forEach(c->c.getCourseGrades()).collect(Collectors.toMap(key,value));
 

но я не уверен, как получить ключ и значение для моей карты. Любые предложения будут оценены.

Редактировать: выходная карта должна содержать название курса и оценку.

Комментарии:

1. @Eran Извините, я думал, что указал это. String — это название курса, а Integer — значение из Map courseGrades.

Ответ №1:

Вы можете получить оценку курса из карты оценок курса студентом и получить оценку в качестве значения карты и названия курса в качестве ключа.

 Map<String,Integer> gradesMap = 
       semester.getCourses()
               .stream()
               .collect(Collectors.toMap(c -> c.getName(),
                                         c -> c.getCourseGrades().get(studentObj)));
 

Примечание: Убедитесь, что вы определили equals() и hashCode() для Student