From 664485b141cbfd24cf914fff644bfbc2ded23384 Mon Sep 17 00:00:00 2001 From: zhangsiyuan <3837703520@qq.com> Date: Sun, 29 Mar 2026 19:49:17 +0800 Subject: [PATCH] =?UTF-8?q?w4-=E5=BC=A0=E6=80=9D=E6=B8=8A-202401070104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/project/analysis/MovieAnalyzer.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 project/src/project/analysis/MovieAnalyzer.java 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