package com.project.common.core.absclasses; import com.project.common.core.interfaces.ITreeNode; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.List; import java.util.Map; public class TreeNodeManager> { private final ImmutableMap nodeMap; private final Map parentIdMap = Maps.newHashMap(); public TreeNodeManager(List nodes) { this.nodeMap = Maps.uniqueIndex(nodes, ITreeNode::getId); } public ITreeNode getTreeNodeAt(Long id) { return this.nodeMap.containsKey(id) ? (ITreeNode) this.nodeMap.get(id) : null; } public void addParentId(Long parentId) { this.parentIdMap.put(parentId, ""); } public List getRoot() { List roots = new ArrayList(); this.nodeMap.forEach((key, node) -> { if (node.getParentId() == 0L || this.parentIdMap.containsKey(node.getId())) { roots.add(node); } }); return roots; } }