#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