案例来自www.51doit.com培训班行哥的课程案例
第二问:
将每次session进行汇总,得出用户每次session的浏览起、止页面,每次session会话总时长等,示意如下:
分析:
代码如下:
1 . 新建一个IPBean用来存结果数据:
public class IPBean {
//session号 ip地址 起始请求时间 结束请求时间 起始页面 跳出页面 访问时长
private long session;
private String ip;
private Date startTime;
private Date endTime;
private String startUrl;
private String endUrl;
/**访问时长,单位是秒*/
private long time;
2 . 得到session汇总的结果
public static void secondQuestion() throws FileNotFoundException, IOException {
//将每次session进行汇总,得出用户每次session的浏览起、止页面,每次session会话总时长
List<IPBean> list = new ArrayList<>();
//将MapMap<String, List<SessionBean>>转成需要的Map
Map<Long, List<SessionBean>> sessionMap = getSessionMap();
Set<Entry<Long, List<SessionBean>>> entrySet = sessionMap.entrySet();
for (Entry<Long, List<SessionBean>> entry : entrySet) {
List<SessionBean> value = entry.getValue();
//如果value元素只有一个
if(value.size()==1) {
SessionBean sBean = value.get(0);
IPBean ipBean = new IPBean(sBean.getSession(), sBean.getIp(), sBean.getTime(), sBean.getTime(), sBean.getUrl(), sBean.getUrl(), 0);
list.add(ipBean);
}else {
//不止一个
SessionBean startBean = value.get(0);
SessionBean endBean = value.get(value.size()-1);
//时间单位是秒
long times = (endBean.getTime().getTime()-startBean.getTime().getTime())/1000;
IPBean ipBean = new IPBean(startBean.getSession(), startBean.getIp(), startBean.getTime(), endBean.getTime(), startBean.getUrl(), endBean.getUrl(), times);
list.add(ipBean);
}
}
list.forEach(System.out::println);
}