一起做网站,免费建站网站制作模板,芬兰网站后缀,佛山微网站开发哪家好你知道的越多#xff0c;你不知道的越多 点赞再看#xff0c;养成习惯 如果您有疑问或者见解#xff0c;欢迎指教#xff1a; 企鹅#xff1a;869192208 文章目录 前言代码实现定义测试实体类实现方法 前言
最近遇到一个地区数据需要转换成树的需求#xff0c;研究了一种… 你知道的越多你不知道的越多 点赞再看养成习惯 如果您有疑问或者见解欢迎指教 企鹅869192208 文章目录 前言代码实现定义测试实体类实现方法 前言
最近遇到一个地区数据需要转换成树的需求研究了一种新方法不使用传统递归的方式而是使用 stream 流的方式构建树。
代码实现
定义测试实体类
import lombok.Data;
import java.util.List;/*** h2 /h2** author xymy* date 2023/12/21 17:17*/
Data
public class TsModel {private String id;private String name;private String pid;private ListTsModel childs;
}实现方法
public static void main(String[] args) {String str [\n {\id\:\1\,\name\:\张三\,\pid\:\\},\n {\id\:\2\,\name\:\张三2\,\pid\:\\},\n {\id\:\3\,\name\:\张三3\,\pid\:\\},\n {\id\:\4\,\name\:\张三4\,\pid\:\\},\n {\id\:\33\,\name\:\张三33\,\pid\:\3\},\n {\id\:\330\,\name\:\张三330\,\pid\:\3\},\n {\id\:\3301\,\name\:\张三330\,\pid\:\330\},\n {\id\:\41\,\name\:\张三41\,\pid\:\4\}\n ];ListTsModel tsModels JSONArray.parseArray(str, TsModel.class);MapString, ListTsModel pModels tsModels.stream().collect(Collectors.groupingBy(ts - StringUtils.isBlank(ts.getPid()) ? : ts.getPid()));ListTsModel childTs new ArrayList();for (TsModel tsModel : tsModels) {String id tsModel.getId();ListTsModel childModel pModels.get(id);if (CollectionUtils.isNotEmpty(childModel)) {tsModel.setChilds(childModel);childTs.addAll(childModel);}}SetString childSeqs childTs.stream().map(t - t.getId()).collect(Collectors.toSet());ListTsModel newTree tsModels.stream().filter(tsm - !childSeqs.contains(tsm.getId())).collect(Collectors.toList());System.out.println(JSON.toJSONString(newTree));} 打印结果 [{id: 1,name: 张三,pid: },{id: 2,name: 张三2,pid: },{childs: [{id: 33,name: 张三33,pid: 3},{childs: [{id: 3301,name: 张三330,pid: 330}],id: 330,name: 张三330,pid: 3}],id: 3,name: 张三3,pid: },{childs: [{id: 41,name: 张三41,pid: 4}],id: 4,name: 张三4,pid: }
]至此就实现了列表转成树的逻辑。