hierarchy-utils 通用树形数据工具库

2024-04-15 15:12

本文主要是介绍hierarchy-utils 通用树形数据工具库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通用树形数据工具库

  • hierarchy-utils
    • 链接地址
    • 使用示例
      • 数据结构 - 菜单
      • 数据源
      • 1.通过原数据结构返回树形数据
      • 2.通过转换数据结构(Map / JSONObject)返回树形数据
      • 3.返回源数据列表中id为rootId的元素或pid为rootId且id能整除2的全部子元素的数据列表 (支持将树形数据打平及过滤)
      • 4.怎样对指定的返回结果列表进行排序的方法

hierarchy-utils

用于构建/查找具有层级关系树形数据的工具库,以解决业务中常见的树形数据处理需求
支持自定义过滤数据、排序及转换数据等

链接地址

https://github.com/joker-pper/hierarchy-utils

使用示例

数据结构 - 菜单

@Data
public class Menu {private Integer id;private String name;private Integer pid;private Integer sort;private List<Menu> children;
}

数据源

    //查询当前用户的菜单列表List<Menu> menuList = menuService.findAllByUserId();//通过json转换List<Menu> menuList = JSONObject.parseArray(menuText, Menu.class);;

1.通过原数据结构返回树形数据

       //默认根元素为-1 (当前所有一级菜单的pid为-1,可根据实际定义根元素使用)Integer rootId = -1;//排序(需注意业务属性值是否为空),可选Comparator<Menu> comparator = Comparator.comparingInt(Menu::getSort);HierarchyUtils.HierarchyFunctions<Menu, Integer, Menu> defaultFunctions = new HierarchyUtils.HierarchyFunctions<>();//获取piddefaultFunctions.setGetPidFunction(data -> data.getPid());//获取iddefaultFunctions.setGetIdFunction(data -> data.getId());//验证是否为rootdefaultFunctions.setIsRootFunction(id -> Objects.equals(rootId, id));//设置childrendefaultFunctions.setSetChildrenFunction((parent, children) -> {parent.setChildren(children);});//是否返回root元素(未设置时默认false,开启时root元素必须存在)defaultFunctions.setIsWithRoot(() -> false);//过滤条件(可选,用来筛选数据)defaultFunctions.setFilterPredicate(menu -> true);List<Menu> hierarchyResult = HierarchyUtils.getHierarchyResult(menuList,defaultFunctions,comparator);System.out.println(JSONObject.toJSONString(hierarchyResult));

2.通过转换数据结构(Map / JSONObject)返回树形数据

    //默认根元素为-1 (当前所有一级菜单的pid为-1,可根据实际定义根元素使用)Integer rootId = -1;//排序(需注意业务属性值是否为空),可选Comparator<Menu> comparator = Comparator.comparingInt(Menu::getSort);HierarchyUtils.HierarchyFunctions<Menu, Integer, JSONObject> transferFunctions = new HierarchyUtils.HierarchyFunctions<>();//获取pidtransferFunctions.setGetPidFunction(data -> data.getPid());//获取idtransferFunctions.setGetIdFunction(data -> data.getId());//验证是否为roottransferFunctions.setIsRootFunction(id -> Objects.equals(rootId, id));//设置转换函数transferFunctions.setTransferFunction(menu -> {//转换数据JSONObject result = (JSONObject) JSON.toJSON(menu);//可定义或移除属性result.put("title", menu.getName());result.put("order", menu.getSort());result.put("newName", menu.getName());result.remove("name");return result;});//设置childrentransferFunctions.setSetChildrenFunction((parent, children) -> {parent.put("children", children);});//是否返回root元素(未设置时默认false,开启时root元素必须存在)transferFunctions.setIsWithRoot(() -> false);//过滤条件(可选,用来筛选数据)transferFunctions.setFilterPredicate(menu -> true);List<JSONObject> transferResults = HierarchyUtils.getHierarchyResult(menuList,transferFunctions,comparator);System.out.println(JSONObject.toJSONString(transferResults));

3.返回源数据列表中id为rootId的元素或pid为rootId且id能整除2的全部子元素的数据列表 (支持将树形数据打平及过滤)

Integer rootId = 1;HierarchyFlatUtils.HierarchyFlatFunctions<Menu, Integer, Menu> functions = new HierarchyFlatUtils.HierarchyFlatFunctions<>();//获取pidfunctions.setGetPidFunction(data -> data.getPid());//获取idfunctions.setGetIdFunction(data -> data.getId());//验证是否为rootfunctions.setIsRootFunction(id -> Objects.equals(rootId, id));//是否返回root元素(未设置时默认false,开启时root元素必须存在)functions.setIsWithRoot(() -> true);//是否返回全部的子元素(未设置时默认false,即默认只返回root元素的直接子元素)functions.setIsWithAllChildren(() -> true);//过滤条件(可选,用来筛选数据)functions.setFilterPredicate(menu -> menu.getId() % 2 == 0 || Objects.equals(rootId, menu.getId()));//排序(需注意业务属性值是否为空),可选Comparator<Menu> comparator = Comparator.comparingInt(Menu::getSort);List<Menu> matchResults = HierarchyFlatUtils.getHierarchyFlatResult(menuList,functions,comparator);//对返回结果排序(需注意业务属性值是否为空),可选HierarchySortUtils.sort(matchResults, comparator);System.out.println(JSONObject.toJSONString(matchResults));

4.怎样对指定的返回结果列表进行排序的方法

    //对返回结果排序 (只排序当前列表,不会递归排序子元素)HierarchySortUtils.sort(list, comparator); //对返回结果及子元素排序(递归排序)HierarchySortUtils.sortWithChildren(list, childrenFunction, comparator);  

这篇关于hierarchy-utils 通用树形数据工具库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906169

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

墨刀原型工具-小白入门篇

墨刀原型工具-小白入门篇 简介 随着互联网的发展和用户体验的重要性越来越受到重视,原型设计逐渐成为了产品设计中的重要环节。墨刀作为一款原型设计工具,以其简洁、易用的特点,受到了很多设计师的喜爱。本文将介绍墨刀原型工具的基本使用方法,以帮助小白快速上手。 第一章:认识墨刀原型工具 1.1 什么是墨刀原型工具 墨刀是一款基于Web的原型设计工具,可以帮助设计师快速创建交互原型,并且可以与团队

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

OpenCompass:大模型测评工具

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型数据侧总结大模型token等基本概念及参数和内存的关系大模型应用开发-华为大模型生态规划从零开始的LLaMA-Factor

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

简鹿文件批量重命名:一款文件批量改名高手都在用的工具

作为 IT 行业的搬砖民工,互联网的数据量爆炸性增长,文件管理成为了一项日益重要的任务。"简鹿文件批量重命名"应运而生,旨在为用户提供一个高效、灵活的解决方案,以应对繁琐的文件命名、排序、创建及属性修改等挑战。 这款软件凭借其一键式操作、强大的自定义规则导入、以及全面的批量处理能力,极大地简化了文件管理流程,尤其适合处理大量文件的个人用户及企业环境,是提高工作效率、保持文件系统整洁的得力助手

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳