正在回答 回答被采纳积分+1
这种设计可以用于展示用户的观看历史或基于用户的兴趣进行更复杂的推荐逻辑(例如,推荐与已观看电影相似但未观看的电影)。
如果你想推荐用户尚未观看的电影,可以调整现有逻辑,并在此基础上进行扩展和优化。
拓展和优化建议:
基于上述建议的代码调整示例:
public class RecommendationSystem {
Map<Integer, List<Integer>> userMoviesMap;
Map<Integer, Float> userRatingsMap; // 新增:用户对电影的评分映射
public RecommendationSystem(){
this.userMoviesMap = new HashMap<>();
this.userRatingsMap = new HashMap<>();
}
// 记录用户观看电影并评分
public void recordMovieWatching(User user, int movieId, float rating) {
if (!userMoviesMap.containsKey(user.id)) {
userMoviesMap.put(user.id, new ArrayList<>());
}
if (!userRatingsMap.containsKey(movieId)) {
userRatingsMap.put(movieId, rating);
}
userMoviesMap.get(user.id).add(movieId);
}
// 推荐未观看且可能感兴趣的电影
public List<Movie> recommendedMovies(User user) {
List<Movie> recommendedMovies = new ArrayList<>();
List<Integer> watchedMovies = userMoviesMap.getOrDefault(user.id, new ArrayList<>());
// 简化版:基于相似用户喜欢但目标用户尚未观看的电影进行推荐
User similarUser = findMostSimilarUser(user);
if (similarUser != null && userMoviesMap.containsKey(similarUser.id)) {
for (int movieId : userMoviesMap.get(similarUser.id)) {
if (!watchedMovies.contains(movieId)) {
Movie movie = getMovieDetails(movieId);
recommendedMovies.add(movie);
}
}
}
// 根据评分排序推荐电影
recommendedMovies.sort((m1, m2) ->
Float.compare(userRatingsMap.getOrDefault(m2.id, 0f), userRatingsMap.getOrDefault(m1.id, 0f))
);
return recommendedMovies;
}
//其他省略
}
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星