Найдите 3 лучших учащихся по оценкам, полученным по каждому предмету, с помощью Stream APIJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Найдите 3 лучших учащихся по оценкам, полученным по каждому предмету, с помощью Stream API

Сообщение Anonymous »

У нас есть класс Student, имеющий свойства StudentId, name и List of subject. Класс субъекта имеет свойства StudentId, subjectName и оценки. У нас есть список студентов, на основе оценок по каждому предмету можно найти 3 лучших студентов с помощью Stream API >

Код: Выделить всё

package Streams;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class IdentifyAndPrintTop3StdsByMarksInEachSubj {

public static void main(String[] args) {

Student std1 = new Student(1001, "SanjayNaik",Arrays.asList(new Subject(1001, "Maths", 87.0)
,new Subject(1001, "English", 72.0)));
Student std2 = new Student(1002, "SanjayNaik",Arrays.asList(new Subject(1002, "Maths", 77.0)
,new Subject(1002, "English", 83.0)));
Student std3 = new Student(1003, "SanjayNaik",Arrays.asList(new Subject(1003, "Maths", 91.0)
,new Subject(1003, "English", 68.0)));
Student std4 = new Student(1004, "SanjayNaik",Arrays.asList(new Subject(1004, "Maths", 76.0)
,new Subject(1004, "English", 51.0)));
Student std5 = new Student(1005, "SanjayNaik",Arrays.asList(new Subject(1005, "Maths", 51.0)
,new Subject(1005, "English", 65.0)));
Student std6 = new Student(1006, "SanjayNaik",Arrays.asList(new Subject(1006, "Maths", 57.0)
,new Subject(1006, "English", 55.0)));
Student std7 = new Student(1007, "SanjayNaik",Arrays.asList(new Subject(1007, "Maths", 98.0)
,new Subject(1007, "English", 92.0)));
Student std8 = new Student(1008, "SanjayNaik",Arrays.asList(new Subject(1008, "Maths", 45.0)
,new Subject(1008, "English", 48.0)));

List studentList = Arrays.asList(std1,std2,std3,std4,std5,std6,std7,std8);

}

}
class Student{
private Integer studentId;
private String name;
private List subjectList;

public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getSubjectList() {
return subjectList;
}
public void setSubjectList(List subjectList) {
this.subjectList = subjectList;
}

public Student(Integer studentId, String name, List subjectList) {
super();
this.studentId = studentId;
this.name = name;
this.subjectList = subjectList;
}

@Override
public String toString() {
return "Student [studentId=" + studentId + ", name=" + name + ", subjectList=" + subjectList + "]";
}

}
class Subject{
private Integer studentId;

private String subjectName;

private Double marks;

public Integer getStudentId() {
return studentId;
}

public void setStudentId(Integer studentId) {
this.studentId = studentId;
}

public String getSubjectName() {
return subjectName;
}

public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}

public Double getMarks() {
return marks;
}

public void setMarks(Double marks) {
this.marks = marks;
}

public Subject(Integer studentId, String subjectName, Double marks) {
super();
this.studentId = studentId;
this.subjectName = subjectName;
this.marks = marks;
}

@Override
public String toString() {
return "Subject [studentId=" + studentId + ", subjectName=" + subjectName + ", marks=" + marks + "]";
}

}
Я сгруппировала их по темам, но не знаю, как отсортировать по меткам

Код: Выделить всё

Map studentMap = studentList
.stream()
.flatMap(t ->  t.getSubjectList().stream())
.toList()
.stream()
.collect(Collectors.groupingBy(t -> t.getSubjectName()))
;
Я хочу узнать 3 лучших учеников на основе их оценок - предметно, используя Stream API

Подробнее здесь: https://stackoverflow.com/questions/793 ... stream-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»