Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.Arrays;
- import java.util.List;
- import java.util.*;
- import java.util.stream.Collectors;
- class MoviesList {
- List<Movie> movies;
- public MoviesList() {
- this.movies = new ArrayList<>();
- }
- public void addMovie(String title, int[] ratings) {
- movies.add(new Movie(title, ratings));
- }
- public List<Movie> top10ByAvgRating() {
- return movies.stream()
- .sorted(Comparator.comparing(Movie::getAverageRating).reversed()
- .thenComparing(Movie::getTitle))
- .limit(10)
- .collect(Collectors.toList());
- }
- private double getMovieCoef(Movie m, int max_ratings_count){
- return m.getAverageRating()*m.getRatings().length/max_ratings_count;
- }
- public List<Movie> top10ByRatingCoef() {
- int max_ratings_count= movies.stream().map(i->i.getRatings().length).max(Integer::max).get();
- Comparator<Movie> comparator= Comparator.comparing((Movie m)->getMovieCoef(m,max_ratings_count)).reversed()
- .thenComparing((Movie m)->m.getTitle());
- return movies.stream().sorted(comparator)
- .limit(10)
- .collect(Collectors.toList());
- }
- }
- class Movie {
- String title;
- int[] ratings;
- public Movie(String title, int[] ratings) {
- this.title = title;
- this.ratings = ratings;
- }
- public String getTitle() {
- return title;
- }
- public int[] getRatings() {
- return ratings;
- }
- public double getAverageRating() {
- return Arrays.stream(ratings).mapToDouble(i -> i).average().orElse(0);
- }
- @Override
- public String toString() {
- return String.format("%s (%.2f) of %d ratings",title,getAverageRating(),ratings.length);
- }
- }
- public class MoviesTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- MoviesList moviesList = new MoviesList();
- int n = scanner.nextInt();
- scanner.nextLine();
- for (int i = 0; i < n; ++i) {
- String title = scanner.nextLine();
- int x = scanner.nextInt();
- int[] ratings = new int[x];
- for (int j = 0; j < x; ++j) {
- ratings[j] = scanner.nextInt();
- }
- scanner.nextLine();
- moviesList.addMovie(title, ratings);
- }
- scanner.close();
- List<Movie> movies = moviesList.top10ByAvgRating();
- System.out.println("=== TOP 10 BY AVERAGE RATING ===");
- for (Movie movie : movies) {
- System.out.println(movie);
- }
- movies = moviesList.top10ByRatingCoef();
- System.out.println("=== TOP 10 BY RATING COEFFICIENT ===");
- for (Movie movie : movies) {
- System.out.println(movie);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement