计算出用户上网流量总流量(上行+下行)最高的网站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

相关文章

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

poj 3422 有流量限制的最小费用流 反用求最大 + 拆点

题意: 给一个n*n(50 * 50) 的数字迷宫,从左上点开始走,走到右下点。 每次只能往右移一格,或者往下移一格。 每个格子,第一次到达时可以获得格子对应的数字作为奖励,再次到达则没有奖励。 问走k次这个迷宫,最大能获得多少奖励。 解析: 拆点,拿样例来说明: 3 2 1 2 3 0 2 1 1 4 2 3*3的数字迷宫,走两次最大能获得多少奖励。 将每个点拆成两个

poj 2195 bfs+有流量限制的最小费用流

题意: 给一张n * m(100 * 100)的图,图中” . " 代表空地, “ M ” 代表人, “ H ” 代表家。 现在,要你安排每个人从他所在的地方移动到家里,每移动一格的消耗是1,求最小的消耗。 人可以移动到家的那一格但是不进去。 解析: 先用bfs搞出每个M与每个H的距离。 然后就是网络流的建图过程了,先抽象出源点s和汇点t。 令源点与每个人相连,容量为1,费用为

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟