Advertisement
dzocesrce

[NP] Movie Collection

Apr 22nd, 2025
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.76 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.*;
  5. import java.util.stream.Collectors;
  6.  
  7. class MoviesList {
  8.     List<Movie> movies;
  9.  
  10.     public MoviesList() {
  11.         this.movies = new ArrayList<>();
  12.     }
  13.  
  14.     public void addMovie(String title, int[] ratings) {
  15.         movies.add(new Movie(title, ratings));
  16.     }
  17.  
  18.     public List<Movie> top10ByAvgRating() {
  19.         return movies.stream()
  20.                 .sorted(Comparator.comparing(Movie::getAverageRating).reversed()
  21.                         .thenComparing(Movie::getTitle))
  22.                 .limit(10)
  23.                 .collect(Collectors.toList());
  24.     }
  25.  
  26.     private double getMovieCoef(Movie m, int max_ratings_count){
  27.         return m.getAverageRating()*m.getRatings().length/max_ratings_count;
  28.     }
  29.  
  30.     public List<Movie> top10ByRatingCoef() {
  31.         int max_ratings_count= movies.stream().map(i->i.getRatings().length).max(Integer::max).get();
  32.         Comparator<Movie> comparator= Comparator.comparing((Movie m)->getMovieCoef(m,max_ratings_count)).reversed()
  33.                 .thenComparing((Movie m)->m.getTitle());
  34.         return movies.stream().sorted(comparator)
  35.                 .limit(10)
  36.                 .collect(Collectors.toList());
  37.  
  38.     }
  39. }
  40.  
  41. class Movie {
  42.  
  43.     String title;
  44.     int[] ratings;
  45.  
  46.     public Movie(String title, int[] ratings) {
  47.         this.title = title;
  48.         this.ratings = ratings;
  49.     }
  50.  
  51.     public String getTitle() {
  52.         return title;
  53.     }
  54.  
  55.     public int[] getRatings() {
  56.         return ratings;
  57.     }
  58.  
  59.     public double getAverageRating() {
  60.         return Arrays.stream(ratings).mapToDouble(i -> i).average().orElse(0);
  61.     }
  62.  
  63.     @Override
  64.     public String toString() {
  65.         return String.format("%s (%.2f) of %d ratings",title,getAverageRating(),ratings.length);
  66.     }
  67. }
  68. public class MoviesTest {
  69.   public static void main(String[] args) {
  70.     Scanner scanner = new Scanner(System.in);
  71.     MoviesList moviesList = new MoviesList();
  72.     int n = scanner.nextInt();
  73.     scanner.nextLine();
  74.     for (int i = 0; i < n; ++i) {
  75.       String title = scanner.nextLine();
  76.       int x = scanner.nextInt();
  77.       int[] ratings = new int[x];
  78.       for (int j = 0; j < x; ++j) {
  79.         ratings[j] = scanner.nextInt();
  80.       }
  81.       scanner.nextLine();
  82.       moviesList.addMovie(title, ratings);
  83.     }
  84.     scanner.close();
  85.     List<Movie> movies = moviesList.top10ByAvgRating();
  86.     System.out.println("=== TOP 10 BY AVERAGE RATING ===");
  87.     for (Movie movie : movies) {
  88.       System.out.println(movie);
  89.     }
  90.     movies = moviesList.top10ByRatingCoef();
  91.     System.out.println("=== TOP 10 BY RATING COEFFICIENT ===");
  92.     for (Movie movie : movies) {
  93.       System.out.println(movie);
  94.     }
  95.   }
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement