没有合适的资源?快使用搜索试试~ 我知道了~
这次让我们来看看如何使用Java 8 Streams(流)来实现一张数据透视表。通常情况下,原始数据本身一般并不容易被人们所读懂,因此我们需要进行一些数据聚合操作来辨别出原始数据中的各种规律模式。而数据透视表是这样一种工具,它运用聚合的方法来展示出各种可视的图形和图表。 在过往的文章中,我们曾展示过如何使用Java 8 Streams进行类似SQL的效果对原始数据进行切割与分解。而的文章建立在那些例子之上,如果你觉得这些对你有些难度的话,我建议你先通过如下链接浏览那两篇文章。 https://dzone.com/articles/java-streams-groupingby-ex
资源推荐
资源详情
资源评论
用用Java Steams创建数据透视表创建数据透视表
这次让我们来看看如何使用Java 8 Streams(流)来实现一张数据透视表。通常情况下,原始数据本身一般并不容易被人
们所读懂,因此我们需要进行一些数据聚合操作来辨别出原始数据中的各种规律模式。而数据透视表是这样一种工具,它运用
聚合的方法来展示出各种可视的图形和图表。
在过往的文章中,我们曾展示过如何使用Java 8 Streams进行类似SQL的效果对原始数据进行切割与分解。而的文章建立
在那些例子之上,如果你觉得这些对你有些难度的话,我建议你先通过如下链接浏览那两篇文章。
https://dzone.com/articles/java-streams-groupingby-examples
https://dzone.com/articles/using-java-collectors
如果你不喜欢使用这种“原始数据”的方法来创建一张数据透视表,而选择使用Excel来实现的话,我为你提供了另外的备
选方案,请参考如下链接:
http://www.novixys.com/blog/excel-pivot-table-using-apache-poi/
将CSV数据表示为POJO
我们用如下的POJO(简单的Java对象,Plain Ordinary Java Object)来表示棒球运动员及其工资。
public class Player {
private int year;
private String teamID;
private String lgID;
private String playerID;
private int salary;
// defined getters and setters here
}
它的数据来自于一个简单的CSV文件,该文件内既没有引用的字段,也没有多行的字段,而且单个字段中还不存在着逗
号。我们可以使用一个简单的正则表达式模式来解析该CSV文件,并将数据加载到一个列表之中。其数据看起来如下所示,
它一共有大约26428行:
yearID,teamID,lgID,playerID,salary
1985,ATL,NL,barkele01,870000
1985,ATL,NL,bedrost01,550000
1985,ATL,NL,benedbr01,545000
1985,ATL,NL,campri01,633333
1985,ATL,NL,ceronri01,625000
…
我们用类似于如下代码的Streams加载CSV的数据:
Pattern pattern = Pattern.compile(",");
try (BufferedReader in = new BufferedReader(new FileReader(filename));){
List<Player> players = in
.lines()
.skip(1)
.map(line -> {
String[] arr = pattern.split(line);
return new Player(Integer.parseInt(arr[0]),
arr[1],
arr[2],
arr[3],
Integer.parseInt(arr[4]));
})
.collect(Collectors.toList());
}
定义数据透视表列的类
我们使用下面的类来定义数据透视表的各个列容器的类。这些列是用于对数据进行分组的。如果你使用的是SQL的话,这
些列将出现在“GROUP BY”的语句中。
public class YearTeam
{
public int year;
public String teamID;
public YearTeam(int year,String teamID) {
this.year = year;
this.teamID = teamID;
}
@Override
public boolean equals(Object other)
{
if ( other == null ) return false;
if ( this == other ) return true;
if ( other instanceof YearTeam ) {
YearTeam yt = (YearTeam)other;
if ( year == yt.year && teamID.equals(yt.teamID) )
资源评论
weixin_38645266
- 粉丝: 4
- 资源: 948
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功