# distream
**Repository Path**: zhangxd11/distream
## Basic Information
- **Project Name**: distream
- **Description**: List扩展库,用于list对象流式处理,包括自定义数据处理器、labmda表达式和等式计算等(list.handle(a->...).handle(a->...).handle(a->...))。
an extended tool of List about how to process data by lambda,expressions and custom class
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/huoyo/distream.git
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-12-01
- **Last Updated**: 2023-12-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Distream
---
[英文文档/ENGLISH](README-EN.md)
一个为Java语言开发的List扩展工具库,可用于list对象流式数据处理,包括自定义数据处理器、lambda表达式和等式计算等
An extended tool of List about how to process data fluently by lambda,expressions and custom class.
* 真正的数据流式丝滑处理
```java
double sum = lines.get("value").sum();
lines = lines
.handle("value=format(value,2)") //round to the nearest hundredth
.handle(line->line.getName()==null,"name=''") //if(line.getName()==null){line.setName('');}
.handle(line->line.getValue()==null,"value=0","value=value+2") //value = line.getValue()==null?0:line.getValue()+2;
.handle("name=replace(name,'#','')") //replace '#' to ''
.handle("percent=double(value)/"+sum) //converting value's tyle to double and computing percent
.groupBy("name").sum("percent"); //groupBy 'name'
```
* 性能更好的写法(v1.1.0支持)
```java
double sum = lines.get("value").sum();
lines = lines
.addHandler("value=format(value,2)")
.addHandler("name=replace(name,'#','')")
.addHandler("percent=double(value)/"+sum)
.execute()
.groupBy("name").sum("percent"); //groupBy 'name'
```
* 更推荐的写法(v1.1.0支持,性能最好)
```java
lines = lines
.addHandler(new DataHandler1())
.addHandler(new DataHandler2())
.addHandler(new DataHandler3())
.addHandler(new DataHandler4())
.execute();
//DataHandler1、2、3、4需要实现DataHandler接口
```
* 便携数据库读取
```java
Datasource datesource = xxx;
ListFrame list = new ListFrame();
list.initDataSource(datesource);
lines = list.readSql("select * from xxx").handle(a->...).handle(a->...)...;
```
> 注意:读取数据库的时候需要引入对应的连接驱动,比如Mysql:
```
mysql
mysql-connector-java
8.0.22
```
#### 引入
引入maven依赖
```
cn.langpy
distream
1.1.0
```
#### 数据读取与转换
##### 0.假设有如下文件
```
序号,姓名,年龄,收入
1,张三,23,5000.11
2,李四,22,4000.22
3,李二狗,20,5000.33
4,韦陀掌,23,3000.44
5,拈花指,23,2000.55
6,小六子,18,5000.66
7,杨潇,23,3000.77
8,李留,19,5000.55
```
##### 1.按行读取文件
按行读取文件,并在每一行的结尾添加";",每一行的开头添加"=>"
```java
ListFrame lines = ListFrame.readString("test.txt");
lines = lines
.handle(line -> line + ";") //add ";" at the end of every line
.handle(line -> "=>"+line ); //add "=>" at the front of every line
```
##### 2.按map读取csv文件
```java
/*read easily*/
//ListFrame