package cn.dreampie.common.utils.tree; import com.google.common.collect.Lists; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Created by wangrenhui on 14-4-12. */ public class TreeUtils { public static List toTree(List params) { List nodes = null; if (params.size() > 0) { //优先级排序 Collections.sort(params, new Comparator<TreeNode>() { @Override public int compare(TreeNode rp1, TreeNode rp2) { return Long.compare(rp1.getParentId(), rp2.getParentId()); } }); nodes = toTree(params, ((TreeNode) params.get(0)).getParentId()); } return nodes; } public static List toTreeLevel(List params, int level) { List nodes = null; if (params.size() > 0) { //优先级排序 Collections.sort(params, new Comparator<TreeNode>() { @Override public int compare(TreeNode rp1, TreeNode rp2) { return Long.compare(rp1.getParentId(), rp2.getParentId()); } }); nodes = toTreeLevel(params, ((TreeNode) params.get(0)).getParentId(), level); } return nodes; } /** * 无限级树形结构 * * @param params * @param pid * @return */ public static List toTree(List params, long pid) { List nodes = Lists.newArrayList(); if (params != null && params.size() > 0) { TreeNode node = null; for (int i = 0; i < params.size(); i++) { node = (TreeNode) params.get(i); if (node.getParentId() == pid) { nodes.add(node); params.remove(i); node.setChildren(toTree(params, node.getId())); i--; } } } return nodes; } /** * 两级树形数据 * * @param params * @param pid * @return */ public static List toTreeLevel(List params, long pid, int level) { List nodes = Lists.newArrayList(); if (params != null && params.size() > 0) { TreeNode node = null;//当前节点 for (int i = 0; i < params.size(); i++) { node = (TreeNode) params.get(i); if (node.getParentId() == pid) { nodes.add(node); params.remove(i); if (level > 1) { // System.out.println(node.getId() + ":" + level); node.setChildren(toTreeLevel(params, node.getId(), --level)); } else { // System.out.println(node.getId() + ":" + level + ":" + nodes.size()); nodes.addAll(toTreeLevel(params, node.getId(), --level)); } level++; i--; } } } return nodes; } // // public static void main(String[] args) { // List params = Lists.newArrayList(); // Channel channel = new Channel(); // channel.setId(1); // channel.setParentId(0); // params.add(channel); // channel = new Channel(); // channel.setId(2); // channel.setParentId(1); // params.add(channel); // channel = new Channel(); // channel.setId(3); // channel.setParentId(2); // params.add(channel); // channel = new Channel(); // channel.setId(4); // channel.setParentId(0); // params.add(channel); // channel = new Channel(); // channel.setId(5); // channel.setParentId(1); // params.add(channel); // List res = new TreeUtils().toTree(params); // System.out.print(StringUtils.join(res, ",")); // } }