概述
数据:
日期,用户名,app名,下载渠道,所在城市,app版本
2016-08-15,刘帅老师,斗地主,app store,上海,v2.0
2016-08-15,刘帅老师,斗地主,app store,上海,v2.2
2016-08-15,刘帅老师,斗地主,app store,上海,v2.3
2017-08-15,涛哥,共享女友,360应用,北京,v2.0
2017-08-15,赵老师,共享女友,安智市场,北京,v1.2
2017-08-15,赵老师,共享女友,安智市场,北京,v1.5
2017-08-15,涛哥,共享女友,360应用,北京,v1.0
2017-08-15,涛哥,共享女友,360应用,北京,v2.0
2017-08-15,涛哥,共享女友,360应用,北京,v2.1
2017-08-14,涛哥,共享女友,360应用,北京,v1.0
2017-08-14,赵老师,共享女友,安智市场,北京,v1.2
2017-08-14,涛哥,共享女友,360应用,天津,v1.2
2017-08-14,涛哥,共享女友,小米应用,天津,v2.0
2017-08-14,刘帅老师,斗地主,app store,上海,v1.8
2016-08-15,刘帅老师,斗地主,app store,上海,v2.4
需求:
统计出每个用户的app版本升级情况
日期 | 用户名 | app名 | 新版本下载渠道 | 升级前版本 | 升级后版本 |
统计结果示例如下:app的下载渠道分开来看
2017-08-14 | 涛哥 | 共享女友 | 360应用 | v1.0 | v1.2 |
2017-08-15 | 涛哥 | 共享女友 | 小米应用 | v1.2 | v2.0 |
将结果存入到数据库中
步骤分析;
1 读取app文件加载数据
2 将数据的前四个字段作为map的key存储,对应的版本信息放在list中并按版本排序 Map
3 遍历map信息 ,取出对应的字段,存储在结果集pojo中(AppBean)
4 将结果集放在list集合中,并按时间排序
知识点:
Map List SimpleDateFormat Date的before() 和after() 排序
代码实现
1 AppBean
private String date,user,appName ,from,minVersion,maxVersion ;
2 加载文件获取app信息数据
BufferedReader br = new BufferedReader(new FileReader("d:/data/app.txt"));
String line = null ;
while((line=br.readLine())!=null){
//System.out.println(line);
String[] split = line.split(",");
String dateStr = split[0];
String user = split[1];
String appName = split[2];
String from = split[3];
String version = split[5];
3 将数据信息以指定的key存储在map中 value是对应的版本list集合(按版本信息排序)
//存储app数据 key是用户的app信息 value 是对应的版本号的集合
Map<String,List<String>> map = new HashMap<>();
BufferedReader br = new BufferedReader(new FileReader("d:/data/app.txt"));
String line = null ;
while((line=br.readLine())!=null){
//System.out.println(line);
String[] split = line.split(",");
String dateStr = split[0];
String user = split[1];
String appName = split[2];
String from = split[3];
String version = split[5];
//System.out.println(version);
String key = dateStr +","+user+","+appName+","+from ;
List<String> list = map.getOrDefault(key, new ArrayList<>());
list.add(version);
//对list排序
SortUtil.sortListByVersion(list);
map.put(key, list);
}
4 List按版本信息排序
/**
* 版本信息升序排列
* @param list
*/
public static void sortListByVersion(List<String> list){
Collections.sort(list,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
});
}
4 取出map中的数据 ,封装结果集信息,将AppBean放在list中
//存储结果集的list
List<AppBean> appBeanList = new ArrayList<>();
Set<Entry<String,List<String>>> entrySet = map.entrySet();
for (Entry<String, List<String>> entry : entrySet) {
System.out.println(entry);
String key = entry.getKey();
String[] split = key.split(",");
String time = split[0];
String user = split[1];
String appName = split[2];
String from = split[3];
//版本信息
List<String> versionList = entry.getValue();
if(versionList.size()>1){//有升级
String minVersion = versionList.get(0);
String maxVersion = versionList.get(versionList.size()-1);
AppBean appBean = new AppBean();
appBean.setDate(time);
appBean.setUser(user);
appBean.setAppName(appName);
appBean.setFrom(from);
appBean.setMinVersion(minVersion);
appBean.setMaxVersion(maxVersion);
appBeanList.add(appBean);
}
}
5 对结果集按照时间排序
//对appBeanList排序按照时间排序
SortUtil.sortListByTime(appBeanList);
6 :List按时间排序
Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;
/**
* 结果集按照时间排序
* @param list
*/
public static void sortListByTime(List<AppBean> list){
Collections.sort(list,new Comparator<AppBean>() {
@Override
public int compare(AppBean o1, AppBean o2) {
try {
String date1 = o1.getDate();
String date2 = o2.getDate();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = format.parse(date1);
Date d2 = format.parse(date2);
// 时间的方法 before() after()
return d1.before(d2)?-1:1 ;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return o1.getDate().compareTo(o2.getDate());
return 0;
}
});
}
更多内容请咨询qq:598196583 附带视频资料
最后
以上就是疯狂吐司为你收集整理的java(版)数据分析--app升级案例的全部内容,希望文章能够帮你解决java(版)数据分析--app升级案例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复