Java Stream API 递归解决方案:
提示:话不多说直接上代码!
// YlQuestion 为实体类
@Override
public List<YlQuestion> questionList() {
// 查询数据
List<YlQuestion> ylQuestions = ylQuestionMapper.selectYlQuestionList(new YlQuestion());
// 过滤父节点
List<YlQuestion> results = ylQuestions.stream().filter((ylQuestion) -> {
return ylQuestion.getParentId() == 0;
}).map((menu) -> {
// menu为父节点数据,ylQuestions为所有数据 ,(getChildren)方法进行筛选
menu.setChildren(getChildren(menu, ylQuestions));
return menu;
}).collect(Collectors.toList());//将结果转化为数组
return results;
}
//递归查找所有菜单的子菜单
private List<YlQuestion> getChildren(YlQuestion menu, List<YlQuestion> ylQuestions) {
List<YlQuestion> children = ylQuestions.stream().filter((entity) -> {
return entity.getParentId().equals(menu.getId());
}).map((entity) -> {
//继续递归找子菜单
entity.setChildren(getChildren(entity, ylQuestions)); //继续调用本方法,递归往下找
return entity;
}).collect(Collectors.toList());
return children;
}
温馨提醒:
希望大家能学以致用,加油!