Java8中特殊写法

最近在做一个手机App里的设置中心,之前旧代码设置中心数据结构是多个List集合然后嵌套一层子集,现在要重新设计,商量后觉得嵌套的结构比较合适产品的PRD,有点类似于之前利用Mybatis实现评论嵌套功能,相比之下写法更加简单

1、首先我们把所有的设置项都放在一张表进行存储,子设置项通过parent_id和父设置项进行关联,这样的结构允许设置项可以嵌套多层,如果以后产品需要加三级设置页,也是能够兼容滴!

大概思路,通过SELECT All 拿到所有设置项,然后根据parentId进行分组

List<Setting> allSetting = userSettingService.selectAllSetting();

Map<String,List<Setting>> settingMap = allsetting.stream().collect(Collectors.groupBy(Setting::getParentId);`

返回的结构就是这种嵌套结构
在这里插入图片描述

重点来了,构造多级树结构

String parentId = "-1";

//从parentId = "-1" 开始

private void buildTree(String parentId,Setting setting, Map<String,List<Setting>> settingMap) {
     List<Setting> mainSettings = settingMap.get(parentId);
     mainSettings.forEach(mainSetting -> {
   		rescure(mainSetting, settingMap, list -> setting.setSubSettings(list))
     });
}

private <T> void rescure(Setting setting, Map<String,List<Setting>> settingMap,Consumer<T> consumer) {
   if (CollectionUtils.isNotEmpty(settingMap.get(setting.getGuid()))) {       
        List<Setting> subSettings = settingMap.get(setting.getGuid()
    	consumer.accept(subSettings))
   		buildTree(setting.getGuid, setting, settingMap);	
   }
}

这样的好处是 代码里设置项可以进行二次处理,例如对某些特殊的设置项在遍历树过程中进行一下处理

这样的写法是最基础的,其实就是递归的思想,用Consumer做了处理,后面还能继续做封装处理,这里就不展开了,推荐一个公众号的链接里面有关于Comsumer和Supplier的简单代码应用 用Java8改造后的模板方法模式真的是yyds!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值