数据:
日期,用户名,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信息数据
BufferedReaderbr=newBufferedReader(newFileReader("d:/data/app.txt"));
Stringline=null;
while((line=br.readLine())!=null){
//System.out.println(line);
String[]split=line.split(",");
StringdateStr=split[0];
Stringuser=split[1];
StringappName=split[2];
Stringfrom=split[3];
Stringversion=split[5];
3 将数据信息以指定的key存储在map中 value是对应的版本list集合(按版本信息排序)
//存储app数据 key是用户的app信息 value 是对应的版本号的集合
Map>map=newHashMap<>();
BufferedReaderbr=newBufferedReader(newFileReader("d:/data/app.txt"));
Stringline=null;
while((line=br.readLine())!=null){
//System.out.println(line);
String[]split=line.split(",");
StringdateStr=split[0];
Stringuser=split[1];
StringappName=split[2];
Stringfrom=split[3];
Stringversion=split[5];
//System.out.println(version);
Stringkey=dateStr+","+user+","+appName+","+from;
Listlist=map.getOrDefault(key,newArrayList<>());
list.add(version);
//对list排序
SortUtil.sortListByVersion(list);
map.put(key,list);
}
4 List按版本信息排序
/**
* 版本信息升序排列
*/
publicstaticvoidsortListByVersion(Listlist){
Collections.sort(list,newComparator() {
publicintcompare(Stringo1, Stringo2) {
//TODOAuto-generated method stub
returno1.compareTo(o2);
}
});
}
4 取出map中的数据 ,封装结果集信息,将AppBean放在list中
//存储结果集的list
List appBeanList = new ArrayList<>();
Set>>entrySet=map.entrySet();
for(Entry>entry:entrySet) {
System.out.println(entry);
Stringkey=entry.getKey();
String[]split=key.split(",");
Stringtime=split[0];
Stringuser=split[1];
StringappName=split[2];
Stringfrom=split[3];
//版本信息
ListversionList=entry.getValue();
if(versionList.size()>1){//有升级
String minVersion = versionList.get(0);
String maxVersion = versionList.get(versionList.size()-1);
AppBeanappBean=newAppBean();
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;
/**
* 结果集按照时间排序
*/
publicstaticvoidsortListByTime(Listlist){
Collections.sort(list,newComparator() {
publicintcompare(AppBeano1, AppBeano2) {
try{
Stringdate1=o1.getDate();
Stringdate2=o2.getDate();
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");
Dated1=format.parse(date1);
Dated2=format.parse(date2);
// 时间的方法 before() after()
return d1.before(d2)?-1:1 ;
}catch(ParseExceptione) {
//TODOAuto-generated catch block
e.printStackTrace();
}
//return o1.getDate().compareTo(o2.getDate());
return0;
}
});
}
更多内容请咨询qq:598196583 附带视频资料