Advertisement
Prohause

23. Average Grades

Apr 12th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.08 KB | None | 0 0
  1. package main;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Scanner;
  6. import java.util.stream.Collectors;
  7.  
  8.  
  9. public class Problem23 {
  10.     public static void main(String[] args) {
  11.         Scanner console = new Scanner(System.in);
  12.  
  13.         Integer count = Integer.parseInt(console.nextLine());
  14.         List<Student> allStudents = new ArrayList<>();
  15.  
  16.         for (int i = 0; i < count; i++) {
  17.             String[] tokens = console.nextLine().split("\\s+");
  18.             String name = tokens[0];
  19.             List<Double> grades = new ArrayList<>();
  20.  
  21.             for (int j = 1; j < tokens.length; j++) {
  22.                 grades.add(Double.parseDouble(tokens[j]));
  23.  
  24.             }
  25.  
  26.             allStudents.add(new Student(name, grades));
  27.  
  28.         }
  29.  
  30.         allStudents.sort((o1, o2) -> {
  31.             if (o1.getName().compareTo(o2.getName())==0){
  32.             return Double.compare(o2.getAverageGrade(), o1.getAverageGrade());
  33.             }
  34.             return o2.getName().compareTo(o1.getName());
  35.         });
  36.  
  37.         for (Student student : allStudents.stream().filter(p->p.getAverageGrade()>=5.0).collect(Collectors.toSet())) {
  38.  
  39.             System.out.printf("%s -> %.2f\n",student.getName(),student.getAverageGrade());
  40.  
  41.         }
  42.     }
  43. }
  44.  
  45. class Student {
  46.     private String name;
  47.     private List<Double> grades;
  48.     private double averageGrade;
  49.  
  50.     String getName() {
  51.         return name;
  52.     }
  53.  
  54.     public void setName(String name) {
  55.         this.name = name;
  56.     }
  57.  
  58.     public List<Double> getGrades() {
  59.         return grades;
  60.     }
  61.  
  62.     public void setGrades(List<Double> grades) {
  63.         this.grades = grades;
  64.     }
  65.  
  66.     double getAverageGrade() {
  67.         if (averageGrade == 0.0) {
  68.             setAverageGrade();
  69.         }
  70.         return averageGrade;
  71.     }
  72.  
  73.     private void setAverageGrade() {
  74.         this.averageGrade = this.grades.stream().mapToDouble(Number::doubleValue).average().getAsDouble();
  75.     }
  76.  
  77.     Student(String name, List<Double> grades) {
  78.         this.name = name;
  79.         this.grades = grades;
  80.  
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement