package com.genersoft.iot.vmp.utils.node; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 森林管理类 * * @author smallchill */ public class ForestNodeManager> { /** * 森林的所有节点 */ private final ImmutableMap nodeMap; /** * 森林的父节点ID */ private final Map parentIdMap = Maps.newHashMap(); public ForestNodeManager(List nodes) { nodeMap = Maps.uniqueIndex(nodes, INode::getChannelId); } /** * 根据节点ID获取一个节点 * * @param id 节点ID * @return 对应的节点对象 */ public INode getTreeNodeAt(String id) { if (nodeMap.containsKey(id)) { return nodeMap.get(id); } return null; } /** * 增加父节点ID * * @param parentId 父节点ID */ public void addParentId(String parentId) { parentIdMap.put(parentId, ""); } /** * 获取树的根节点(一个森林对应多颗树) * * @return 树的根节点集合 */ public List getRoot() { List roots = new ArrayList<>(); nodeMap.forEach((key, node) -> { if (node.getParentId() == null || parentIdMap.containsKey(node.getChannelId())) { roots.add(node); } }); return roots; } }