一、前言

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可以查询。