# JDFrame
**Repository Path**: liu-yong-123/JDFrame
## Basic Information
- **Project Name**: JDFrame
- **Description**: 同步github JDFrame仓库 
供参考学习加速使用
源地址:https://github.com/burukeYou/JDFrame
在此致敬:CAIZHIHAO
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: https://github.com/burukeYou/JDFrame
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2024-08-09
- **Last Updated**: 2024-08-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# JDFrame
-------

[](https://github.com/burukeYou/fast-retry/blob/main/LICENSE)
# Documentation
-------
[](http://javadoc.io/doc/io.github.burukeyou/jdframe)
# 背景
burukeyou的私房工具, 由于经常记不住stream的一些api每次要复制来复制去,想要更加语意化的api
于是想到了以前写大数据Spark pandnas 等DataFrame模型时的api, 然后发现其实也存在java的JVM层的DataFrame模型比如 tablesaw,joinery
但是他们得硬编码去指定字段名,这对于有代码洁癖的burukeyou实在难以忍受,而且我只是简单统计下数据,我想在一些场景下能不能使用匿名函数去指定的字段处理去处理,于是便有了这个
一个jvm层级的仿DataFrame工具,语意化和简化java8的stream流式处理工具, 也支持窗口函数
# 快速开始
# 版本列表
https://central.sonatype.com/artifact/io.github.burukeyou/jdframe/versions
## 引入依赖
```java
    io.github.burukeyou
    jdframe
    0.1.0
```
## 快速使用案例
```java
        // 获取学生年龄在9到16岁的学学校合计分数最高的前10名的学校
        SDFrame> sdf2 = SDFrame.read(studentList)
                .whereNotNull(Student::getAge)
                .whereBetween(Student::getAge,9,16)
                .groupBySum(Student::getSchool, Student::getScore)
                .sortDesc(FI2::getC2)
                .cutFirst(10);
```
其他具体API见 IFrame接口
JDFrame 与 SDFrame区别 ,JDFrame的所有操作都是实时生效的 
# Frame的API列表
- read()  -读取成Frame进行数据处理
- from()   -从其他流读取成Frame进行数据处理
- toLists() -转换成普通列表
- toArray(): 转成数组, 支持无需手动指定数组类型
- toMap()    - 转换成Map。 支持多层级Map转换。 如 Map>
- isEmpty(): 判断集合是否为空
- containsValue(): 集合是否包含指定值
- stream()  -获取Frame的流.
- forEachDo()  -迭代处理每个元素等价于forEach。 也支持迭代下标index
- forEachParallel()        并行的forEach
- defaultScale()  -设置统计的数值为小数时的保留精度
- show()   -打印Frame成表到控制台
- columns()  -获取表头列名
- col()    -获取某一列值
- page()  -获取分页数据
- append()  -添加元素
- union()   -合并其他Frame
- map()      -矩阵转换
- mapParallel()    并行的map
- mapPercent()  -百分数转换
- partition()  -分区
- addRowNumberCol() -添加序号列(从1开始)
- addRankCol()  -添加排名列
- sortDesc()  -降序排序
- sortAsc()   -升序排序
- cutFirst()  -截取前N个
- cutLast()   -截取后N个
- cut()       - 范围截取
- cutPage()   - 分页截取
- cutFirstRank() -截取前N排名数据
- head()       -获取前N个元素
- tail()      -获取后N个元素
- subList()    - 范围截取
- replenish()   -补充缺失条目
- distinct()   -去重
- joining()    -将字段值按照指定分隔符拼接起来
- explodeString()   -爆炸函数一列转多行,将字符串按照分隔符(支持正则)切割后生成多行
- explodeJsonArray()  -爆炸函数一列转多行,将json字符串数组生成多行
- explodeCollection()  -爆炸函数一列转多行,将集合生成多行
- explodeCollectionArray()   -爆炸函数一列转多行,将数组生成多行
==== 筛选 == ======
- where()       -自定义筛选
- whereNull()   -筛选Null值。如果是字符串兼容了空字符串的处理
- whereNotNull()  -筛选非Null值。
- whereBetween()  -筛选范围内的。 前闭后闭
- whereBetweenN()  -筛选范围内的。前开后开  
- whereBetweenR()   -筛选范围内的。 前开后闭
- whereBetweenL()    -筛选范围内的。 前闭后开
- whereNotBetween()   -筛选范围外的。  前闭后闭
- whereNotBetweenN()  -筛选范围外的。  前开后开
- whereIn()    - 筛选在列表内的  
- whereNotIn()   - 筛选不在列表内的
- whereTrue()   - 筛选值为true的
- whereNotTrue()  - 筛选值为false的
- whereEq()    - 筛选等于的
- whereNotEq()    - 筛选不等于的
- whereGt()    - 筛选大于的
- whereGe()   - 筛选大于等于的
- whereLt()   - 筛选小于的
- whereLe()    - 筛选小于等于的
- whereLike()   - 模糊匹配
- whereNotLike()  -不模糊匹配的
- whereLikeLeft() - 前缀匹配
- whereLikeRight() - 后缀匹配
 ===== 汇总 ==== 
- sum()      -对某列求和
- avg()    -对某列求平均值
- maxMin()   -获取最大和最小对象
- maxMinValue()   -获取最大和最小值
- max()      -获取最大对象
- maxValue()  -获取最大值
- minValue()  -获取最小值
- min()    -获取最小对象
- count()  -获取行数
- countDistinct()  -去重后获取行数
==== 分组 ====
- group()   -分组
- groupBySum()   -分组求和
- groupByCount()   -分组求数量
- groupBySumCount()   -分组求和以及求数量
- groupByAvg()   -分组求平均值
- groupByMax()    -分组求最大对象
- groupByMaxValue()   -分组求最大值
- groupByMin()     -分组求最小对象
- groupByMinValue()    -分组求最小值
- groupByMaxMinValue()   -分组求最大值和最小值
- groupByMaxMin()    -分组求最大对象和最小对象
==== 窗口函数 ====  
- window()   -打开窗口函数
- overRowNumber()   -生成行号
- overRank()        -生成排名号。排名不连续
- overDenseRank()   -生成排名号。排名连续
- overPercentRank() -生成百分比排名号。  (rank-1) / (rows-1)
- overCumeDist()  -生成累积分布的比率
- overLag()    -生成当前行的前N行数据
- overLead()   -生成当前行的前后行数据
- overNthValue()  -生成窗口范围内的第N行数据
- overFirstValue() -生成窗口范围内的第1行数据
- overLastValue()  -生成窗口范围内的最后1行数据
- overSum()   -生成和
- overAvg()   -生成平均值
- overMaxValue()  -生成最大值
- overMinValue()  -生成最小值
- overCount()   -生成数量
- overNtile()  -分桶,生成桶编号
==== 连接 == ======
- join()    -内连接 (与SQL语义一致)
- joinVoid()        执行连接操作,不改变矩阵内容 
- joinOnce()         只会内连接一次
- joinOnceVoid()        执行连接操作并只会连接一次,不改变矩阵内容
- leftJoin()  -左边接 (与SQL语义一致)
- leftJoinVoid()                执行左连接操作,不改变矩阵内容
- leftJoinOnce()                  只会左连接一次
- leftJoinOnceVoid()        执行左连接操作并只会左连接一次,不改变矩阵内容
- rightJoin()  -右连接 (与SQL语义一致)
- rightJoinVoid()                  执行右连接操作,不改变矩阵内容
- rightJoinOnce()                 只会右连接一次
- rightJoinOnceVoid()        执行右连接操作并只会右连接一次,不改变矩阵内容
# 其他
如果还有api可以扩展,欢迎你的建议,或者一起扩展