Advertisement
Martina312

[НП] - Лабораториски вежби

Aug 22nd, 2020
1,901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.91 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3.  
  4. class Student{
  5.     private String index;
  6.     private List<Integer> labPoints;
  7.  
  8.     public Student(String index, List<Integer> labPoints) {
  9.         this.index = index;
  10.         this.labPoints = labPoints;
  11.     }
  12.  
  13.     public double getAverage(){
  14.         return labPoints.stream().mapToDouble(labPoints -> labPoints).sum() / 10;
  15.     }
  16.  
  17.     public String getIndex() {
  18.         return index;
  19.     }
  20.  
  21.     public boolean getSignature(){
  22.         return labPoints.size() >= 8;
  23.     }
  24.  
  25.     @Override
  26.     public String toString() {
  27.         return String.format("%s %s %.2f", index, getSignature()? "YES":"NO", getAverage());
  28.     }
  29. }
  30.  
  31. class LabExercises{
  32.     Set<Student> students;
  33.  
  34.     public LabExercises() {
  35.         this.students = new HashSet<>();
  36.     }
  37.  
  38.     public void addStudent(Student student){
  39.         students.add(student);
  40.     }
  41.  
  42.     public void printByAveragePoints(boolean ascending, int n){
  43.         Comparator<Student> ascendingComparator = Comparator.comparing(Student::getAverage).thenComparing(Student::getIndex);
  44.         Comparator<Student> descendingComparator = Comparator.comparing(Student::getAverage).thenComparing(Student::getIndex).reversed();
  45.  
  46.         Comparator<Student> comparator = ascending ? ascendingComparator : descendingComparator;
  47.  
  48.         students.stream().sorted(comparator).limit(n).forEach(System.out::println);
  49.     }
  50.  
  51.     public List<Student> failedStudents(){
  52.         return students.stream()
  53.                 .filter(student -> !student.getSignature())
  54.                 .sorted(Comparator.comparing(Student::getIndex).thenComparing(Student::getAverage))
  55.                 .collect(Collectors.toList());
  56.     }
  57.  
  58.     public Map<Integer, Double> getStatisticsByYear(){
  59.         Map<Integer, Double> sum = new TreeMap<>(Integer::compareTo);
  60.         Map<Integer, Integer> howMany = new TreeMap<>(Integer::compareTo);
  61.  
  62.         students.stream()
  63.                 .filter(Student::getSignature)
  64.                 .forEach(student -> {
  65.                     int year = 20 - Integer.parseInt(student.getIndex().substring(0,2));
  66.                     sum.computeIfAbsent(year, (k) -> sum.put(year,0.0));
  67.                     sum.put(year, sum.get(year)+student.getAverage());
  68.  
  69.                     howMany.computeIfAbsent(year, (k) -> howMany.put(year,0));
  70.                     howMany.put(year, howMany.get(year)+1);
  71.                 });
  72.  
  73.         Map<Integer, Double> result = new TreeMap<>(Integer::compareTo);
  74.         sum.keySet()
  75.                 .forEach(year -> {
  76.                     result.put(year, sum.get(year)/howMany.get(year));
  77.                 });
  78.         return result;
  79.     }
  80. }
  81.  
  82. public class LabExercisesTest {
  83.  
  84.     public static void main(String[] args) {
  85.         Scanner sc = new Scanner(System.in);
  86.         LabExercises labExercises = new LabExercises();
  87.         while (sc.hasNextLine()) {
  88.             String input = sc.nextLine();
  89.             String[] parts = input.split("\\s+");
  90.             String index = parts[0];
  91.             List<Integer> points = Arrays.stream(parts).skip(1)
  92.                     .mapToInt(Integer::parseInt)
  93.                     .boxed()
  94.                     .collect(Collectors.toList());
  95.  
  96.             labExercises.addStudent(new Student(index, points));
  97.         }
  98.  
  99.         System.out.println("===printByAveragePoints (ascending)===");
  100.         labExercises.printByAveragePoints(true, 100);
  101.         System.out.println("===printByAveragePoints (descending)===");
  102.         labExercises.printByAveragePoints(false, 100);
  103.         System.out.println("===failed students===");
  104.         labExercises.failedStudents().forEach(System.out::println);
  105.         System.out.println("===statistics by year");
  106.         labExercises.getStatisticsByYear().entrySet().stream()
  107.                 .map(entry -> String.format("%d : %.2f", entry.getKey(), entry.getValue()))
  108.                 .forEach(System.out::println);
  109.  
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement