OrgVo如下
@Data
public class OrgVo {
private String id;
private String name;
private String parentId;
private List<OrgVo> children = new ArrayList<>();
}
拼装树代码,其中第一行为获取扁平机构。tree即为机构树。这里为list是因为可能存在多个并列的根节点。
List<OrgVo> orgVoList = testFeign.query();
Map<String,OrgVo> map = orgVoList.stream().collect(Collectors.toMap(x->x.getId(),v->v));
List<OrgVo> tree = orgVoList.stream().filter(orgVo -> {
String parentId = orgVo.getParentId();
OrgVo parentVo = map.get(parentId);
if (Objects.isNull(parentVo)) {
//根目录
return true;
} else {
//将orgVo加入到parentVo的children中
parentVo.getChildren().add(orgVo);
//过滤掉非根目录
return false;
}
}).collect(Collectors.toList());
其他将扁平数据拼装为树可按类似处理。