当我们登录一个系统后,首先获取到的是一些菜单列表,并且这些菜单是具有子父级关系的。
一、创建菜单实体类
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("BD_SECURITY_SOURCES")
public class BdSecuritySources implements Serializable {
private static final long serialVersionUID = 1L;
@TableField("ID")
private String id;
@TableField("MENUID")
private String menuid;
@TableField("NAME")
private String name;
@TableField("PARENTID")
private String parentid;
@TableField("UL")
private String ul;
@TableField("REDIRECT")
private String redirect;
@TableField("ORDERID")
private String orderId;
@TableField("ISHIDDEN")
private String isHidden;
@TableField("MENUTYPE")
private String menuType;
@TableField("TITLE")
private String title;
private List<BdSecuritySources> children;
}
二、递归算法的使用
@Override
public List<BdSecuritySources> getBdSecuritySourcesByUserID(String userId) {
List<BdSecuritySources> bdSecuritySourcesList = bdSecuritySourcesMapper.getBdSecuritySourcesByUserID(userId);
return bdSecuritySourcesList.stream().filter(o -> "0".equals(o.getParentid()))
.peek(o->o.setChildren(getChildren(o,bdSecuritySourcesList)))
.sorted(Comparator.comparing(BdSecuritySources::getOrderId))
.collect(Collectors.toList());
}
/**
* 利用stream递归排序
* @param menu 实例对象
* @param menuList list
* @return 排序后的list
*/
public List<BdSecuritySources> getChildren(BdSecuritySources menu,List<BdSecuritySources> menuList){
return menuList.stream().filter(o->o.getParentid().equals(menu.getMenuid()))
.peek(o->o.setChildren(getChildren(o,menuList)))
.sorted(Comparator.comparing(BdSecuritySources::getOrderId))
.collect(Collectors.toList());
}