Anonymous
Найдите 3 лучших учащихся по оценкам, полученным по каждому предмету, с помощью Stream API
Сообщение
Anonymous » 28 дек 2024, 13:44
У нас есть класс 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
1735382660
Anonymous
У нас есть класс Student, имеющий свойства StudentId, name и List of subject. Класс субъекта имеет свойства StudentId, subjectName и оценки. У нас есть список студентов, на основе оценок по каждому предмету можно найти 3 лучших студентов с помощью Stream API > [code]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 + "]"; } } [/code] Я сгруппировала их по темам, но не знаю, как отсортировать по меткам [code] Map studentMap = studentList .stream() .flatMap(t -> t.getSubjectList().stream()) .toList() .stream() .collect(Collectors.groupingBy(t -> t.getSubjectName())) ; [/code] Я хочу узнать 3 лучших учеников на основе их оценок - предметно, используя Stream API Подробнее здесь: [url]https://stackoverflow.com/questions/79313423/find-top-3-students-by-marks-obtained-in-each-subject-using-stream-api[/url]