Java8新特性--实现父子三级树形结构

原型及输出效果

  • 原型-(品牌-大类-图片)三级对应关系

在这里插入图片描述

  • 输出效果-父子三级树形结构并保证其顺序
    在这里插入图片描述

代码实现

  • –实体类–
@Data
public class ScreenGuidanceVO {

    /**
     * 品牌名称
     */
    private String brandName;

    /**
     * 型号名称
     */
    private String modelName;

	/**
     * 图片地址
     */
    private String pictureUrl;
}
  • –逻辑层–
//返回格式
JSONArray js = new JSONArray();
//1. 查库-列表如原型图所示
List<ScreenGuidanceVO> screenGuidanceList = service.getXXXList(screenGuidanceVO);
//分组保留原有顺序-(按BrandName分组,并保留其原有顺序)
Map<String, List<ScreenGuidanceVO>> lists = screenGuidanceList.stream().collect(Collectors.groupingBy(ScreenGuidanceVO::getBrandName,LinkedHashMap::new,Collectors.toCollection(ArrayList::new)));

//遍历
for (Map.Entry<String, List<ScreenGuidanceVO>> entry : lists.entrySet()) {
    JSONObject brandObject = new JSONObject();
    //获取list集合
    List<ScreenGuidanceVO> value = entry.getValue();
    //获取key值
    String keys = entry.getKey();

    brandObject.put("brandName",keys);

    JSONArray modelArray = new JSONArray();

    //Map<String, List<ScreenGuidanceVO>> modelList = value.stream().collect(Collectors.groupingBy(ScreenGuidanceVO::getModelName));--未保证其顺序
    //保持原有顺序-(LinkedHashMap按插曲顺序排序)
    Map<String, List<ScreenGuidanceVO>> modelList = value.stream().collect(Collectors.groupingBy(ScreenGuidanceVO::getModelName,LinkedHashMap::new,Collectors.toCollection(ArrayList::new)));

    for (Map.Entry<String, List<ScreenGuidanceVO>> modelEntry : modelList.entrySet()) {
        JSONObject modelObject = new JSONObject();
        //获取list集合
        List<ScreenGuidanceVO> modelValue = modelEntry.getValue();

        //获取key值
        String modelKey = modelEntry.getKey();
        modelObject.put("modelName",modelKey);
        //获取中下游点字段的集合
        List<String> downNo = modelValue.stream().map(ScreenGuidanceVO::getPictureUrl).distinct().collect(Collectors.toList());
        modelObject.put("pictureList",downNo);
        modelArray.add(modelObject);
    }
    brandObject.put("modelList",modelArray);
    js.add(brandObject);
}

写在最后

  • 省市区父子三级树形结构,也可按照此逻辑实现,json拼接逻辑可按照各自需求自行拼接。
  • 如有不足之处或更好解决方案,请大佬批评示下!
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值