层级机构,主要treehashmap 的key 如果用做对象存储需要注意 hashcode和equal方法
Map<Long, TreeMap<Long, Object>> menuMaps = misMenuVOS.stream()
.collect(Collectors.groupingBy(Object::getParentId, Collector.of(() -> new TreeMap<Long, Object>(), // Map的构造器
(m, t) -> m.put(t.getId(), t), // 累加器
(left, right) -> {
left.putAll(right);
return left;
})));
判断对象
Optional.ofNullable(misFieldVOS).orElseGet(()->Lists.newArrayList()) //比下面美观些 还有返回默认值
Optional.ofNullable(misFieldVOS).ifpresent(e->{})
** 注意: sql的查询几乎永远大于内存执行的时间 没有必要优化
多叉树遍历,获取查询结果路径
public List<Long> findOrgChain(Object org, Long orgId) {
if (Objects.isNull(org)) {
return null;
}
List<Long> chainIds = Lists.newArrayList();
chainIds.add(org.getId());
if (Objects.equals(org.getId(), orgId)) {
return chainIds;
}
if (!CollectionUtils.isEmpty(org.getBranchs())) {
List<OrgPostsVO.Org> onlyOrgs = org.getBranchs().stream()
.filter(e -> e.getType() == CommonContentEnum.ORG.getCode()).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(onlyOrgs)) {
for (OrgPostsVO.Org only : onlyOrgs) {
List<Long> orgChain = findOrgChain(only, orgId);
if (!CollectionUtils.isEmpty(orgChain)) {
chainIds.addAll(orgChain);
return chainIds;
}
}
}
}
chainIds.remove(chainIds.size() - 1);
return null;
}
获取子集中第一个元素,利用treeHashMap
private void getRedirect(Map<Long, TreeMap<Object, Object>> menuMaps ,Long id,Map<Long,String> redirect){
TreeMap<Object, Object> longMisMenuVOTreeMap = menuMaps.get(id);
if (longMisMenuVOTreeMap == null) {return ;}
longMisMenuVOTreeMap.forEach((k,v)->{
TreeMap<Object, Object> children = menuMaps.get(k.getId());
if(Objects.nonNull(children)){
Map.Entry<Object, Object> longMisMenuVOEntry = children.firstEntry();
redirect.put(k.getId(),v.getPathName()+"/"+longMisMenuVOEntry.getValue().getPathName() );
getRedirect(menuMaps,v.getId(),redirect);
}
});