• 通过stream流实现分页、模糊搜索、按列过滤功能


    通过stream实现分页、模糊搜索、按列过滤功能

    背景

    在有一些数据通过数据库查询出来后,需要经过一定的逻辑处理才进行前端展示,这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐,但是通过stream流处理会简单很多

    逻辑展示

    这是一个写好的模板,感觉也可以根据这个写成一个通用的处理,后面如果再用的就补充一下
    在这里插入图片描述
    代码解释
    ①:将完成数据处理的list重新构成一个新的list,当然,里面的数据引用是一样的,但是新list可以对其增删改了
    ②:设置分页的总数,前端经常会用到这个值。
    ③:模糊搜索,获取前端传入的模糊搜索值
    ④:这里可以支持两个字段的模糊搜索,使用filter结合||运算得到结果
    ⑤:按列过滤,这里也是通过filter函数,其中代码处理如下:
    在这里插入图片描述
    按列过滤和模糊搜索类似,但是传入的是一个map,k为这个字段名,v为模糊搜索内容。然后遍历这个map。如果能和filter中的对象值匹配到,保留,如果都匹配不到则丢弃。最后返回这个list
    因为过滤完成后的大小会变,所以total重新设置

    ⑥:排序,排序也可以做出按列排序的方式,使用sorted方法,其中的参数需要一个compartor类型,自定义sortBy()方法生成如下:
    在这里插入图片描述
    对其中的字段进行排序,分别有string、数值类以及默认排序,排序方式desc或者asc等,如果要加时间类或者其他类型,需要手动实现comparter接口构造比较方式了。

    ⑦分页:分页将传入的当前页和每页显示数目通过skip和limit函数实现,较为简单
    ⑧结果保存及返回

    示例代码

    public class Person {
        private String name;
        private int age;
        private String city;
    
        // 构造函数、getter和setter方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    import java.util.Comparator;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class PersonStreamExample {
    
        public static void main(String[] args) {
            List<Person> persons = getSampleData(); // 获取示例数据
    
            // 分页
            int pageSize = 10;
            int pageNumber = 1;
            List<Person> page = persons.stream()
                    .skip((pageNumber - 1) * pageSize)
                    .limit(pageSize)
                    .collect(Collectors.toList());
    
            // 按列过滤
            String filterColumn = "city";
            String filterValue = "New York";
            List<Person> filtered = persons.stream()
                    .filter(person -> filterColumn.equals("name") && person.getName().contains(filterValue))
                    .filter(person -> filterColumn.equals("age") && person.getAge() >= Integer.parseInt(filterValue))
                    .filter(person -> filterColumn.equals("city") && person.getCity().equals(filterValue))
                    .collect(Collectors.toList());
    
            // 模糊搜索
            String keyword = "John";
            List<Person> searchResults = persons.stream()
                    .filter(person -> person.getName().contains(keyword) || person.getCity().contains(keyword))
                    .collect(Collectors.toList());
    
            // 按列排序
            String sortColumn = "age";
            List<Person> sorted = persons.stream()
                    .sorted(Comparator.comparingInt(person -> {
                        if (sortColumn.equals("name")) {
                            return person.getName().hashCode();
                        } else if (sortColumn.equals("age")) {
                            return person.getAge();
                        } else if (sortColumn.equals("city")) {
                            return person.getCity().hashCode();
                        } else {
                            return 0;
                        }
                    }))
                    .collect(Collectors.toList());
        }
    
        // 获取示例数据
        private static List<Person> getSampleData() {
            // 创建和返回示例数据的逻辑
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    后续有使用,补充提取为通用方法的内容

  • 相关阅读:
    Zephyr调度算法
    力扣刷题(代码回忆录)——动态规划
    MTK平台Camera Dump Buffer处理
    一种用于环境声源的被动到达角(AoA)提取算法(Matlab代码实现)
    ios逆向,tweak简洁使用教程
    Android修行手册-POI操作Excel文档
    UML图与List集合
    Rancher 系列文章-Rancher 对接 Active Directory 实战
    云原生|kubernetes|找回丢失的etcd集群节点---etcd节点重新添加,扩容和重新初始化k8s的master节点
    基于Velero1.8.1+Minio实现备份恢复K8s集群
  • 原文地址:https://blog.csdn.net/qq_40454136/article/details/132887563