diff --git a/project/src/project/analysis/MovieAnalyzer.java b/project/src/project/analysis/MovieAnalyzer.java new file mode 100644 index 0000000..48f5722 --- /dev/null +++ b/project/src/project/analysis/MovieAnalyzer.java @@ -0,0 +1,42 @@ +package project.analysis; + +import project.bean.Movie; + +import java.util.*; +import java.util.stream.Collectors; + +public class MovieAnalyzer { + public static Map getRatingDistribution(List movies) { + return movies.stream() + .collect(Collectors.groupingBy(Movie::getRating, Collectors.counting())); + } + + public static Map getYearRatingCorrelation(List movies) { + return movies.stream() + .collect(Collectors.groupingBy(Movie::getYear, + Collectors.averagingDouble(Movie::getRating))); + } + + public static Map getDirectorMovieCount(List movies) { + return movies.stream() + .collect(Collectors.groupingBy(Movie::getDirector, Collectors.counting())) + .entrySet().stream() + .filter(entry -> entry.getValue() > 1) + .sorted(Map.Entry.comparingByValue().reversed()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); + } + + public static double getAverageRating(List movies) { + return movies.stream() + .mapToDouble(Movie::getRating) + .average() + .orElse(0.0); + } + + public static List getTopRatedMovies(List movies, int count) { + return movies.stream() + .sorted(Comparator.comparingDouble(Movie::getRating).reversed()) + .limit(count) + .collect(Collectors.toList()); + } +} \ No newline at end of file