java生成树型思维导图_Java生成思维脑图
导读
由于项目需要,需要写一个工具类生成思维脑图。
使用
工具类
引用依赖
com.github.eljah
xmindjbehaveplugin
0.8
工具类Tutis
import cn.hutool.system.SystemUtil;
import com.google.common.collect.Lists;
import org.xmind.core.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* 生成思维脑图工具类
*
* @date 2020/10/16
*/
public class Tutis {
/**
* 当前类路径
*/
public static final String CLASS_PATH = GeneratorDoubanXmind.class.getResource("/").getPath();
/**
* 文件分隔符
*/
public static final String FILE_SEPARATOR = SystemUtil.getOsInfo().getFileSeparator();
/**
* 生成思维脑图
*
* @param list 集合数据
* @param fileName 文件名.xmind
* @throws IOException
* @throws CoreException
*/
public void exportXmind(List list, String fileName) throws IOException, CoreException {
// 创建思维导图的工作空间
IWorkbookBuilder workbookBuilder = Core.getWorkbookBuilder();
IWorkbook workbook = workbookBuilder.createWorkbook();
// 获得默认sheet
ISheet primarySheet = workbook.getPrimarySheet();
// 获得根主题
ITopic rootTopic = primarySheet.getRootTopic();
// 章节 topic 的列表
ArrayList chapterTopics = Lists.newArrayList();
recycle(chapterTopics, workbook, list);
// 把章节节点添加到要节点上
chapterTopics.forEach(it -> rootTopic.add(it, ITopic.ATTACHED));
// 保存
workbook.save(CLASS_PATH + FILE_SEPARATOR + fileName + ".xmind");
}
/**
* 思维导图递归调用
*
* @param chapterTopics
* @param workbook
* @param childrens 集合数据
*/
public void recycle(ArrayList chapterTopics, IWorkbook workbook, List childrens) {
for (Tree children : childrens) {
if (children != null) {
if (children.getChildrens() != null && children.getChildrens().size() > 0) {
// 创建章节节点
ITopic topic = workbook.createTopic();
topic.setTitleText(children.getName());
chapterTopics.add(topic);
List list = children.getChildrens();
//如果还有子节点,那么采用地柜调用继续生成
if (list != null && list.size() > 0) {
recycle(chapterTopics, workbook, list);
} else {
//否则的结束当前循环
break;
}
} else {
// 创建小节节点
ITopic topic = workbook.createTopic();
topic.setTitleText(children.getName());
chapterTopics.get(chapterTopics.size() - 1).add(topic, ITopic.ATTACHED);
}
}
}
}
}
树状实体类Tree
import java.util.List;
/**
* 树状类
*/
public class Tree {
/**
* id
*/
private int id;
/**
* 标题
*/
private String name;
/**
* 父级Id
*/
private int parentId;
/**
* 子集
*/
private List childrens;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public List getChildrens() {
return childrens;
}
public void setChildrens(List childrens) {
this.childrens = childrens;
}
public Tree(int id, String name, int parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
@Override
public String toString() {
return "Tree [id=" + id + ", name=" + name + ", parentId=" + parentId
+ ", childrens=" + childrens + "]";
}
}
测试数据
import java.util.ArrayList;
import java.util.List;
public class Tes {
public static void main(String[] args) {
Tree tree1 = new Tree(1, "顶层节点1", 0);
Tree tree2 = new Tree(2, "顶层节点2", 0);
Tree tree3 = new Tree(3, "顶层节点3", 0);
Tree tree4 = new Tree(4, "二级节点4", 1);
Tree tree5 = new Tree(5, "二级节点5", 2);
Tree tree6 = new Tree(6, "二级节点6", 3);
Tree tree7 = new Tree(7, "三级节点7", 4);
Tree tree8 = new Tree(8, "三级节点8", 4);
Tree tree9 = new Tree(9, "三级节点9", 5);
Tree m7 = new Tree(10, "M7", 4);
Tree m8 = new Tree(11, "M8", 4);
Tree m9 = new Tree(12, "M9", 5);
Tree k7 = new Tree(13, "k7", 10);
Tree k8 = new Tree(14, "k8", 10);
Tree k9 = new Tree(15, "k9", 5);
List trees = new ArrayList();
trees.add(tree9);
trees.add(tree8);
trees.add(tree7);
trees.add(tree6);
trees.add(tree5);
trees.add(tree4);
trees.add(tree3);
trees.add(tree2);
trees.add(tree1);
trees.add(m7);
trees.add(m8);
trees.add(m9);
trees.add(k7);
trees.add(k8);
trees.add(k9);
List rootTrees = new ArrayList();
for (Tree tree : trees) {
if (tree.getParentId() == 0) {
rootTrees.add(tree);
}
for (Tree t : trees) {
if (t.getParentId() == tree.getId()) {
if (tree.getChildrens() == null) {
List myChildrens = new ArrayList();
myChildrens.add(t);
tree.setChildrens(myChildrens);
} else {
tree.getChildrens().add(t);
}
}
}
}
for (Tree tree : rootTrees) {
System.out.println(tree.toString());
}
try {
Tutis tutis = new Tutis();
tutis.exportXmind(rootTrees,"测试思维导出");
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
控制台数据
Tree [id=3, name=顶层节点3, parentId=0, childrens=[Tree [id=6, name=二级节点6, parentId=3, childrens=null]]]
Tree [id=2, name=顶层节点2, parentId=0, childrens=[Tree [id=5, name=二级节点5, parentId=2, childrens=[Tree [id=9, name=三级节点9, parentId=5, childrens=null], Tree [id=12, name=M9, parentId=5, childrens=null], Tree [id=15, name=k9, parentId=5, childrens=null]]]]]
Tree [id=1, name=顶层节点1, parentId=0, childrens=[Tree [id=4, name=二级节点4, parentId=1, childrens=[Tree [id=8, name=三级节点8, parentId=4, childrens=null], Tree [id=7, name=三级节点7, parentId=4, childrens=null], Tree [id=10, name=M7, parentId=4, childrens=[Tree [id=13, name=k7, parentId=10, childrens=null], Tree [id=14, name=k8, parentId=10, childrens=null]]], Tree [id=11, name=M8, parentId=4, childrens=null]]]]]
生成的脑图
END
搞定~
java生成树型思维导图_Java生成思维脑图相关推荐
- 简单又漂亮的思维导图怎么画?脑图创作分享
简单又漂亮的思维导图怎么画?现在思维导图已经成为很多人首选的思维辅助工具,它帮助我们发散思维的同时,还能轻松理清我们的思绪,现在绘制思维导图的方法一般有两种,分别是软件创作和手绘. 如果你不会画画,但 ...
- 思维导图 mindnote,MindMaster,亿图图示,百度脑图
第一次了解到思维导图,导师用的MAC,有一款mindnote的软件 但该软件支持苹果系统 如果想要windows,可以尝试网页版的百度脑图 客户端的亿图图示或者mindmaster mindmaste ...
- 创建便于git管理的思维导图 -- markdown结合百度脑图
创建便于git管理的思维导图的方法 概述 最近在做一些计划或者总结的时候,喜欢用思维导图的方式去实现,图的方式可以很方便的展示内容,便于查看. 自己比较喜欢做思维导图的软件是百度脑图,主要是用起来比较 ...
- java 甘特图_Java报表软件--甘特图(Gantt chart)深度解析
什么是甘特图(Gantt chart) 一般对甘特图的解释是:以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间,即甘特图(Gantt chart)是将活动与时间联系起来的 ...
- java集合类继承关系图_java集合继承关系图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...
- java 切图_java用pdfbox切图并重绘宽高
引入pdfbox使用的jar pdfbox-2.0.8.jar,maven依赖如图: org.apache.pdfbox pdfbox 2.0.8 切图:按页切图并生成对应的png格式的图片,输出至相 ...
- 千万级用户产品更名为“亿图脑图 MindMaster”背后:脑图软件市场高速增长
东尼·博赞发明思维导图导图时,大概没想到思维导图会变得如此受欢迎.数据显示,全球范围内,约有6亿人使用思维导图这一工具,其用户涵盖众多领域,包括企业家.政府.公司.学术机构等. 而作为一款功能全面的专 ...
- 【制作脑图】万彩脑图大师教程 | 卸载万彩脑图大师
此处提供两种方法卸载万彩脑图大师(以Win10系统为例). 方法一:开始 → 卸载万彩脑图大师 单击电脑左下方的"开始"按钮,在右边程序中找到"卸载万彩脑图大师" ...
- java md5加密32位小写_Java生成MD5的方法,简单封装并转为32位小写
1 import java.security.MessageDigest; 2 3 public class MD5 { 4 5 public static String toMD5(String p ...
- java前补零工具类_java生成编码工具类,不足补0
~~~~~ 小小工具类!你值得拥有 简单粗暴,直接上代码 import java.text.NumberFormat; /** * @author: Abner * @description: 编码工 ...
最新文章
- 1015 Reversible Primes
- 【SLAM】卡尔曼滤波:究竟滤了谁?
- 编程珠玑第七章 粗略估算
- python详细安装教程环境配置-如何安装Python(环境设置)?详细安装步骤图解
- SQL 语句之insert语句插入数据:若表中有重复的主键或数据继续插入解决方案
- C#实现简体繁体转换代码示例
- CSS之viewports剖析
- [九度][何海涛] 旋转数组的最小数字
- 简练软考知识点整理-互联网+
- 微软软件推送服务器,微软将通过系统更新功能向大部分用户推送新版Microsoft Edge浏览器-...
- string-indexOf、substring、split
- 使用脚本 Nodesource快速安装nodejs环境
- Python连载7-time包的其他函数
- 基于新标注模式的实体和关系联合抽取方法(Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme)
- 对计算机进行培训内容,对计算机培训的心得体会
- 寿险精算实验一——编制生命表换算表
- 威廉玛丽学院计算机专业,威廉玛丽学院CS排名2020年掌握的流程盘点
- 小米MIUI关闭内容中心通知
- 基于 SpringBoot 的个人博客系统设计与实现(含论文与程序代码).rar
- 线性子空间和仿射子空间