import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.alibaba.fastjson.JSON;
问题
/**
* 每个 用户 评分最高的N条记录
每个用户评分的平均值
*/
public class LoadData {
public static void main(String[] args) { /调用方法打印问题结果 }
//第二问:每个用户评分的平均值
public static void question2() {
Map<String, List<Movie>> uidMap = getUidMap();
Set<Entry<String, List<Movie>>> entrySet = uidMap.entrySet();
for (Entry<String, List<Movie>> entry : entrySet) {
String uid = entry.getKey();
List<Movie> list = entry.getValue();
double sum=0;
for (Movie movie : list) {
//将一个字符传转换成integer类型
sum+=Double.parseDouble(movie.getRate());
}
double avg=sum/list.size();
System.out.println(uid+"----"+avg);
}
}
//第一问,求每个用户评分最高的3条记录;
public static void question1() {
Map<String, List<Movie>> uidMap = getUidMap();
Set<Entry<String, List<Movie>>> entrySet = uidMap.entrySet();
for (Entry<String, List<Movie>> entry : entrySet) {
String uid = entry.getKey();
List<Movie> list = entry.getValue();
if(list!=null&&list.size()>=3) {
//对list中的分数排序
Collections.sort(list, new Comparator<Movie>() {
@Override
public int compare(Movie o1, Movie o2) {
return o2.getRate().compareTo(o1.getRate());
}
});
for (int i = 0; i <3; i++) {
Movie m = list.get(i);
System.out.println(uid+"-----"+m);
}
}
}
}
/*获取以用户id为key的map/
public static Map<String,List<Movie>> getUidMap() {
Map<String,List<Movie>>map=new HashMap<>();
try(BufferedReader br = new BufferedReader(new FileReader("E:\\java增强\\day06\\rating.txt"));) {
String line=null;
while((line=br.readLine())!=null) {
Movie m;
try {
//可能文件中存在不是规定格式的数据,所以跳过它
m = JSON.parseObject(line, Movie.class);
} catch (Exception e) {
continue;
}
//想将数据传到list中,就先getOrDefault,然后再list.add()
List<Movie> list = map.getOrDefault(m.getUid(), new ArrayList<>());
list.add(m);
map.put(m.getUid(), list);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/*获取以电影的id为key的map/
public static Map<String,List<Movie>> getMovieMap() {
Map<String,List<Movie>>map=new HashMap<>();
try(BufferedReader br = new BufferedReader(new FileReader("E:\\java增强\\day06\\rating.txt"));) {
String line=null;
while((line=br.readLine())!=null) {
Movie m;
try {
//可能文件中存在不是规定格式的数据,所以跳过它
m = JSON.parseObject(line, Movie.class);
} catch (Exception e) {
continue;
}
//想将数据传到list中,就先getOrDefault,然后再list.add()
List<Movie> list = map.getOrDefault(m.getMovie(), new ArrayList<>());
list.add(m);
map.put(m.getMovie(), list);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}