计算出用户上网流量总流量(上行+下行)最高的网站Top3

2023-10-19 03:30

本文主要是介绍计算出用户上网流量总流量(上行+下行)最高的网站Top3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分析用户访问网站日志,计算出上网总流量前3名的网站名及总流量

日志部分如下(电话号,URL,上行量,下行量)

13026230503 http://v.baidu.com/tv 20 5000
13826544101 http://www.weibo.com/?category=7 20 5000
13926435656 http://v.baidu.com/tv 20 5000
13926251106 https://www.jianshu.com/p/bb88f7520b33 70 3000
18211575961 http://weibo.com/?category=1760 10 100
13560439658 http://www.51doit.cn 10 4000
15920133257 https://www.jianshu.com/p/bb88f7520b9e 20 3000
13719199419 http://movie.youku.com 10 6000
13000117991 http://www.51doit.cn 10 2000

分析过程:
  1. 读取日志文件内容
  2. 处理获取日志中的电话号,URL,上行量,下行量数据
  3. 汇总网站名及流量,继续处理
  4. 得出结果
所需要工具:
  1. 读取文件 IO流: BufferedReader() 缓冲字符流,利用其中 readLine() 方法。
  2. 字符串分割:split() 方法 ,返回 String 数组
  3. HashMap 储存筛选出来数据< key, value>。
    ** key: String类型, 储存网站名
    ** value: Integer类型,储存总流量
  4. lambda表达式,利用List集合中排序功能进行网站总流量排名
具体实现代码如下(已封装成方法)
public static void getData(String path) throws Exception {/**读取日志文件*/BufferedReader br = new BufferedReader(new FileReader(new File(path)));Map<String, Integer> map = new HashMap<String,Integer>();String line =null;while((line=br.readLine())!=null) {/**读取每一行内容,然后进行分割 空格*/String[] split = line.split("\\s");String phone=split[0];String url=split[1];Integer upLoad=Integer.parseInt(split[2]);Integer downLoad=Integer.parseInt(split[3]);/**除去不符合规范的网站*/String[] split2 = url.split("\\.");if(split2.length>=3) {String webSite=split2[1];Integer totalStream = map.getOrDefault(webSite, 0);totalStream+=upLoad+downLoad;map.put(webSite, totalStream);}}/**利用ArrayList构造方法把map.entrySet转成List集合top3*/List<Map.Entry<String, Integer>> top3=new ArrayList<Map.Entry<String, Integer>>(map.entrySet());List<Entry<String, Integer>> collect = top3.stream().sorted((o1,o2)->o2.getValue()-o1.getValue()).limit(3).collect(Collectors.toList());System.out.println("网站总流量(上行+下行)Top3\t\n");for (Entry<String, Integer> entry : collect) {System.out.println("网站名:"+entry.getKey()+", 总流量:"+entry.getValue());}

彩蛋1

流程图
这里写图片描述

/**
当while循环开始, map中无key: baidu, 此时回馈0.返回值Integer类型'
totalStream+=upLoad+downLoad; 此时计算 baidu的总流量
然后map.put("baidu", 5020);
当下次循环, 读取到第二个 baidu时,5020+=upLoad+downLoad.
*/
String webSite=split2[1];
Integer totalStream =map.getOrDefault(webSite, 0);
totalStream+=upLoad+downLoad;
map.put(webSite, totalStream);

这篇关于计算出用户上网流量总流量(上行+下行)最高的网站Top3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236980

相关文章

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

如何关闭Mac的Safari通知? 3招教你关闭Safari浏览器网站通知的技巧

《如何关闭Mac的Safari通知?3招教你关闭Safari浏览器网站通知的技巧》当我们在使用Mac电脑专注做一件事情的时候,总是会被一些消息推送通知所打扰,这时候,我们就希望关闭这些烦人的Mac通... Safari 浏览器的「通知」功能本意是为了方便用户及时获取最新资讯,但很容易被一些网站滥用,导致我们

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设