java版()数据分析--app升级案例

数据:

日期,用户名,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 将数据的前四个字段作为mapkey存储,对应的版本信息放在list中并按版本排序 Map

 3 遍历map信息 ,取出对应的字段,存储在结果集pojo中(AppBean

 4 将结果集放在list集合中,并按时间排序

知识点:

Map List  SimpleDateFormat   Datebefore() 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存储在mapvalue是对应的版本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    附带视频资料




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页