不是最高效的,但是希望对大家有所帮助
实体类
public class SoKind {
private String id; //主键
private String name; //字典名称
private String value; //字典值
private Integer level; //数据层级
private String step; //字典值
private String so; //类别标志
private String pid; //父id
private String remark; //备注
private Integer sort; //排序
private String tip; //标签
private List<SoKind> children;//子值
}
实现逻辑
List<SoKind> list = new ArrayList<>();
//获取最高层级,然后根据层级遍历
int maxLevel = soKindService.getMaxLevel();
if (level == null) {
level = 0;
}
List<SoKind> child = new ArrayList<>();
//分组,遍历,赋值
for (int i = 0; i <= maxLevel - level; i++) {
List<SoKind> dictList = soKindService.getDictList(level + i, so, pid);
// dictList.forEach(dict -> dict.setValue((dict.getSo()) + "_" + dict.getValue()));
List<SoKind> collect = dictList.stream().sorted(Comparator.comparing(SoKind::getValue)).collect(Collectors.toList());
if (child.size() == 0) {
child = collect;
list = child;
} else {
if (i == 1) {
list.forEach(soKind -> soKind.setChildren(collect.stream().collect(Collectors.groupingBy(SoKind::getPid)).get(soKind.getId())));
} else {
child.forEach(soKind -> soKind.setChildren(collect.stream().collect(Collectors.groupingBy(SoKind::getPid)).get(soKind.getId())));
}
child = collect;
}
}