栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

造treeNode数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

造treeNode数据

造treeNode数据 一、原因

在使用elemntui的级联选择器时,它需要的数据是这样的

options: [{
          value: 'zhinan',
          label: '指南',
          children: [{
            value: 'shejiyuanze',
            label: '设计原则',
            children: [{
              value: 'yizhi',
              label: '一致'
            }, {
              value: 'fankui',
              label: '反馈'
            }, {
              value: 'xiaolv',
              label: '效率'
            }, {
              value: 'kekong',
              label: '可控'
            }]
          }, {
            value: 'daohang',
            label: '导航',
            children: [{
              value: 'cexiangdaohang',
              label: '侧向导航'
            }, {
              value: 'dingbudaohang',
              label: '顶部导航'
            }]
          }] 

而一般我们数据库查出来的数据是一个数组,是这个样子的

[Goods(id=1, name=苹果, type=水果), Goods(id=2, name=香蕉, type=水果), Goods(id=3, name=橘子, type=水果), Goods(id=4, name=娃娃菜, type=蔬菜), Goods(id=5, name=大白菜, type=蔬菜)]

数据不匹配,这要怎么做?

二、解决

主要是要学会分析,他要的是什么样的数据结构,我就给他什么数据结构。

这里是要按类型划分,类型下面就是具体的名字,比如

上面这个数据,在前台的显示是

水果------苹果

​ ------香蕉

​ ------橘子

蔬菜------娃娃菜

​ ------大白菜

要呈现这个样子。。。

从这里就可以发现,前面是一个类型,后面是一个数组,对应着各种该类型下的实例

思路:使用一个map key存放类型 value存放实际类型所对应的具体实物

代码如下

实体类
package com.sugar.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Options {

    private Long id;

    private String value;

    private String label;

    private List children;

    public Options(Long id, String value) {
        this.id = id;
        this.value = value;
    }
}


package com.sugar.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {

    private Long id;

    private String name;

    private String type;
}

测试类
package com.sugar.test;

import com.sugar.domain.Goods;
import com.sugar.domain.Options;

import java.util.*;

public class TestTreeNode {

    public static void main(String[] args) {
        List goodsList = new ArrayList<>();
        goodsList.add(new Goods(1L,"苹果","水果"));
        goodsList.add(new Goods(2L,"香蕉","水果"));
        goodsList.add(new Goods(3L,"橘子","水果"));
        goodsList.add(new Goods(4L,"娃娃菜","蔬菜"));
        goodsList.add(new Goods(5L,"大白菜","蔬菜"));
        System.out.println(goodsList);

        List optionsList = generateTreeNode(goodsList);
        System.out.println(optionsList);
    }

    private static List generateTreeNode(List goodsList) {
        List optionsList = new ArrayList<>(); //返回的
        HashMap> mapping = new HashMap<>();
        for (Goods goods : goodsList) {
            if(mapping.containsKey(goods.getType())){
                Options options = new Options();
                options.setId(goods.getId());
                options.setValue(goods.getName());
                mapping.get(goods.getType()).add(options);
            }else{
                List list = new ArrayList<>();
                Options options = new Options();
                options.setId(goods.getId());
                options.setValue(goods.getName());
                list.add(options);
                mapping.put(goods.getType(),list);
            }
        }
        mapping.forEach((type,data)->{
            Options options = new Options();
            options.setValue(type);
            options.setChildren(data);
            optionsList.add(options);
        });
        return optionsList;
    }
}

输出结果

这样前端就可解析,显示

结果:
[Options(id=null, value=蔬菜, label=null, children=[Options(id=4, value=娃娃菜, label=null, children=null), Options(id=5, value=大白菜, label=null, children=null)]), Options(id=null, value=水果, label=null, children=[Options(id=1, value=苹果, label=null, children=null), Options(id=2, value=香蕉, label=null, children=null), Options(id=3, value=橘子, label=null, children=null)])]
原始数据:
[Goods(id=1, name=苹果, type=水果), Goods(id=2, name=香蕉, type=水果), Goods(id=3, name=橘子, type=水果), Goods(id=4, name=娃娃菜, type=蔬菜), Goods(id=5, name=大白菜, type=蔬菜)]
PS

就这个需求,我搞了一下午都没搞出来,只依稀记得以前RBAC模型时,菜单的加载使用过树类型转化,但那个有一个pid,跟我这个又不一样,写了好久,还是没有写出来,这还是后面回到住处,仔细思考,才想出来可以这样做,可能我适合一个安静的环境吧,哈哈!!!

还是对数据结构了解的不够呀,这是我目前想出来的比较好的解决办法。还有更好的,只能等我以后慢慢发现学习,暂时先应付过去。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号