Guava实现 过滤文本,排序,转换内容,分组计数转换map 等等
重要点 :看注释
从access.log中统计数据
- 对healthcheck.html的请求不计入统计
- 输出请求总量,以及GET和POST分别的总量
- 输出请求最频繁的10个接口及其次数,按次数降序
- 输出每个小时有多少分钟请求数超过400次, 比如12点有30分钟每分钟超过了400次,11点有35分钟每分钟超过了400次
public class stream {
public static void main(String[] args) {
//获取资源文件夹路径
String path = stream.class.getResource("/").getPath() + "access.log";
File file = new File(path);
try {
List<String> lines = Files.readLines(file, Charsets.UTF_8);
Collection<String> collection = Collections2.filter(lines, x -> !x.contains("healthcheck.html"));
System.out.println("请求总量:" + collection.stream().count());
//lambda 如果需要多个语句用大括号
System.out.println("GET请求量:" + collection.stream().filter((String x) -> {
return x.contains("GET");
}).count()); System.out.println("POST请求量:" + collection.stream().filter(x -> x.contains("POST")).count());
//这里用stream.flatMap和map 结果是一样的 因为没有涉及到逗号,俩者都是用来进行文本格式转换
// 除此之外 flatMap需要用Stream.of转换一下 map不需要
// 下面业务就是提取 提交链接
List<String> newlines = lines.stream().flatMap(line -> Stream.of(line.substring(line.indexOf(" /") + 1))).
flatMap(line -> Stream.of(line.substring(0, line.indexOf(" ")))).
filter(word -> word.length() > 0).
collect(Collectors.toList()); List<String> finallines = new ArrayList<String>();
for (String line : newlines) {
if (line.contains("?")) {
finallines.add(line.substring(0, line.indexOf("?")));
} else {
finallines.add(line);
}
} /* Collectors.groupingBy(Function.identity(), Collectors.counting())是用来分组的,
分组函数第一个参数 如下面是代表每一行line内容,后面是计数,因为list可能会有重复内容,按照line内容
分组并记下重复次数转换到对应Map的key和value */
Map<String, Long> map = finallines.stream().
collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); /* 下面是sorted排序 其中 comparingByValue() 是按照map中value升序排序 如果是comparingByKey()
则按照key升序排序 reversed是反过来 也就是变成降序, skip(1) 是跳过第一条数据,limit(10) 取10条数据
forEachOrdered 按照顺序输出 */
Map<String, Long> sortMap = new LinkedHashMap<>();
map.entrySet().stream().sorted(Map.Entry.<String, Long>comparingByValue().reversed()).skip(1).limit(10).
forEachOrdered(e -> sortMap.put(e.getKey(), e.getValue())); for (String key : sortMap.keySet()) {
System.out.println(key + " " + sortMap.get(key));
} Table<String, String, Integer> table = HashBasedTable.create(); Iterator iter = collection.iterator(); while (iter.hasNext()) {
String line = (String) iter.next();
line = line.substring(line.indexOf(":") + 1);
line = line.substring(0, line.indexOf(" +"));
String hour = line.substring(0, 2);
String minute = line.substring(3, 5); if (table.contains(hour, minute)) {
int count = table.get(hour, minute);
table.put(hour, minute, count + 1);
} else {
table.put(hour, minute, 1);
} } Iterator celliter = table.cellSet().iterator();
Map<String, Integer> countMap = new HashMap<>();
while (celliter.hasNext()) {
Table.Cell<String, String, Integer> cell = (Table.Cell<String, String, Integer>) celliter.next();
if (cell.getValue() > 400) {
if (countMap.containsKey(cell.getRowKey())) {
Integer count = countMap.get(cell.getRowKey()) + 1;
countMap.put(cell.getRowKey(), count);
} else
countMap.put(cell.getRowKey(), 1);
}
} for (String key : countMap.keySet()) {
System.out.println(key + "点有" + countMap.get(key) + "分钟每分钟超过了400次");
} } catch (IOException e) {
e.printStackTrace();
} }
}
Guava实现 过滤文本,排序,转换内容,分组计数转换map 等等的更多相关文章
- 在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView
背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5中创建GridView>中,我们学习了如何在 ASP.NET MVC 中实现 GridView,类似于 ASP.NET web ...
- MixItUp:超炫!基于 CSS3 & jQuery 的过滤和排序插件
MixItUp 是一款轻量,但功能强大的 jQuery 插件,提供了对分类和有序内容的美丽的动画过滤和排序功能.特别适合用于作品集网站,画廊,图片博客以及任何的分类或有序内容. 它是如何工作的? Mi ...
- [转]在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView
本文转自:http://www.cnblogs.com/powertoolsteam/p/MVC5_GridView_2.html 背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5 ...
- Oracle Day2 过滤、排序、单行函数
1.过滤和排序 SQL> --查询10号部门的所有员工信息 SQL> select * from emp ; 未选定行 SQL> ed SP2: 无法创建保存文件 "afi ...
- 《Entity Framework 6 Recipes》中文翻译系列 (27) ------ 第五章 加载实体和导航属性之关联实体过滤、排序、执行聚合操作
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-9 关联实体过滤和排序 问题 你有一实体的实例,你想加载应用了过滤和排序的相关 ...
- Oracle01——基本查询、过滤和排序、单行函数、多行函数和多表查询
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7272236.html Oracle的集群 Oracle的体系结构 SQL> --当 ...
- 使用 awk 过滤文本或文件中的字符串
当我们在 Unix/Linux 下使用特定的命令从字符串或文件中读取或编辑文本时,我们经常需要过滤输出以得到感兴趣的部分.这时正则表达式就派上用场了. 什么是正则表达式? 正则表达式可以定义为代表若干 ...
- [Linux] day07——查看及过滤文本
查看及过滤文本 =====================================cat concatenate -n 添加行号------------------- ...
- django-rest-framework 基础四 过滤、排序、分页、异常处理
django-rest-framework 基础四 过滤.排序.分页.异常处理 目录 django-rest-framework 基础四 过滤.排序.分页.异常处理 1. 过滤 1.1 内置过滤类 1 ...
随机推荐
- Centos 7 Saltstack 集群
一. Saltstack 双master master1 -------------------master2 | minion master1 1.yum -y install salt-mas ...
- bzoj 2870 最长道路tree——边分治
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2870 关于边分治:https://www.cnblogs.com/Khada-Jhin/p/ ...
- VS2013 未找到与约束。。。
新建项目或打开项目时,VS2013 未找到与约束...问题: 解决方案:控制面板>程序>程序和功能 找到如下选中软件右击修复 即可(修复前需关闭VS2013)
- CENTOS 7 64BIT,MYSQL5.7安装与配置
配置MYSQL YUM源 wget -P ./ http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm ######## ...
- ecstore开启发送邮件日志,并且排查邮件发布出去原因
config.php里 define("MAIL_LOG", true);//发送邮件日志开启2017-04-19 10:29:31 解决sendmail connection r ...
- 关于SQL Server 无法生成 FRunCM 线程(不完全)
在五一的前一天,准备启动数据库完成我剩下的项目代码时,数据库配置管理器出现了一个让人蛋疼的问题sqlserv配置管理器出现请求失败或服务器未及时响应关于这个问题的处理方法,经过我两个小时的百度,网上对 ...
- Task Class
https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.task?redirectedfrom=MSDN&view ...
- 微信开发-业务域名、JS接口安全域名、网页授权域名
在微信公众平台上可配置这些域名. 1.业务域名:在微信浏览器中点击文本框,会弹出下面的提示,很不爽,通过配置业务域名可以将该提示去掉 2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要 ...
- 【优化】自定义抛出throw 对象练习
package ltb6w; import java.util.*; public class Bank { private boolean bool=true; private String sel ...
- <亲测>CentOS7 安装mysql8.0(YUM方式)
CentOS7 安装mysql(YUM方式) 1.下载mysql源安装包 shell> wget http://dev.mysql.com/get/mysql80-community-rel ...