一、前言
java8的Stream流相信我们都用过,但是里面的一些api实在难以记住,想要更加语意化的api,使用匿名函数去指定的字段处理去处理,我们今天要学习的就是JDFrame,一个jvm层级的仿DataFrame工具,语意化和简化java8的stream流式处理工具。
二、简单使用
1.引入依赖
<dependency>
<groupId>io.github.burukeyou</groupId>
<artifactId>jdframe</artifactId>
<version>0.0.4</version>
</dependency>
2.创建测试实体类
package com.example.dataproject.entity;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author qx
* @date 2024/8/15
* @des 学生类实体
*/
@Data
@ToString
public class Student {
private Long id;
private String name;
private String school;
private String level;
private Integer age;
private BigDecimal score;
private Integer rank;
public Student() {
}
public Student(Long id, String name, String school, String level, Integer age, BigDecimal score) {
this.id = id;
this.name = name;
this.school = school;
this.level = level;
this.age = age;
this.score = score;
}
}
简单使用
package com.example.dataproject.test;
import com.example.dataproject.entity.Student;
import com.google.common.collect.Lists;
import io.github.burukeyou.dataframe.iframe.SDFrame;
import java.math.BigDecimal;
import java.util.List;
/**
* @author qx
* @date 2024/8/15
* @des
*/
public class StudentTest {
public static void main(String[] args) {
List<Student> studentList = getStudentList();
//计算年龄在12到15岁之间的数据
List<Student> list = SDFrame.read(studentList).whereNotNull(Student::getAge).whereBetween(Student::getAge, 12, 15).toLists();
System.out.println(list);
}
private static List<Student> getStudentList() {
List<Student> studentList = Lists.newArrayList();
studentList.add(new Student(1L, "aa", "一中", "一年级", 11, new BigDecimal(1)));
studentList.add(new Student(2L, "aa", "一中", "一年级", 11, new BigDecimal(1)));
studentList.add(new Student(3L, "bb", "一中", "三年级", 12, new BigDecimal(2)));
studentList.add(new Student(4L, "cc", "二中", "一年级", 13, new BigDecimal(3)));
studentList.add(new Student(5L, "dd", "二中", "一年级", 14, new BigDecimal(4)));
studentList.add(new Student(6L, "ee", "三中", "二年级", 14, new BigDecimal(5)));
studentList.add(new Student(7L, "ee", "三中", "二年级", 15, new BigDecimal(5)));
return studentList;
}
}
运行程序:
[Student(id=3, name=bb, school=一中, level=三年级, age=12, score=2, rank=null), Student(id=4, name=cc, school=二中, level=一年级, age=13, score=3, rank=null), Student(id=5, name=dd, school=二中, level=一年级, age=14, score=4, rank=null), Student(id=6, name=ee, school=三中, level=二年级, age=14, score=5, rank=null), Student(id=7, name=ee, school=三中, level=二年级, age=15, score=5, rank=null)]
三、API简介
2.1、矩阵查看相关
方法 | 含义 |
void show(int n); | 打印矩阵信息到控制台 |
List<String> columns(); | 获取矩阵的表头字段名 |
T head(); | 获取第一个元素 |
List<R> col(Function<T, R> function); | 获取矩阵某一列值 |
T tail(); | 获取最后一个元素 |
List<T> tail(int n); | 获取后n个元素 |
List<T> page(int page,int pageSize) | 获取分页数据 |
2.2、筛选相关
方法 | 含义 |
whereBetween | 数据之间 |
whereNotNull | 过滤不为空 |
whereGt | 大于 |
whereLt | 小于 |
whereEq | 等于 |
whereIn | 在数值里面 |
whereLike | 模糊查询 |
whereLikeLeft | 类似xx% |
whereLikeRight | 类似%xx |
2.3、汇总相关
方法 | 含义 |
max | 最大 |
min | 最小 |
avg | 平均值 |
maxMin | 同时获取最大和最小 |
sum | 合计 |
2.4、去重相关
原生steam只支持对象去重,不支持按特定字段去重
distinct | 去重 |
具体其他相关API可以查询。