Finden Sie mithilfe der Stream-API die drei besten Schüler anhand der in jedem Fach erzielten NotenJava

Java-Forum
Anonymous
 Finden Sie mithilfe der Stream-API die drei besten Schüler anhand der in jedem Fach erzielten Noten

Post by Anonymous »

Wir haben eine Klasse „Student“ mit den Eigenschaften „studentId“, „name“ und „Liste des Fachs“. Mit der Klasse „Subject“ haben wir die Eigenschaften „studentId“, „subjectName“ und „noten“. Wir haben eine Liste von Studenten, die auf der Grundlage der Noten für jedes Fach die drei besten Studenten mithilfe der Stream-API ermittelt.

Code: Select all

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 + "]";
}

}
Ich habe es thematisch gruppiert, weiß aber nicht, wie ich sie nach Markierungen sortieren soll

Code: Select all

Map studentMap = studentList
.stream()
.flatMap(t ->  t.getSubjectList().stream())
.toList()
.stream()
.collect(Collectors.groupingBy(t -> t.getSubjectName()))
;
Ich möchte die drei besten Schüler anhand ihrer Noten herausfinden – fachbezogen mithilfe der Stream-API. Die besten 3 Studenten jedes Fachs.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post