ListToTreeUtil
import lombok.Data;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
public class ListToTreeUtil {
public static <T> List<Tree<T>> convertListToTree(List<T> nodeList, TreeConverter<T> converter) {
if (nodeList == null || nodeList.isEmpty()) {
return new ArrayList<>();
}
Map<Object, Tree<T>> nodeMap = new HashMap<>();
List<Tree<T>> rootNodes = new ArrayList<>();
for (T item : nodeList) {
Object itemId = converter.getItemId(item);
Tree<T> treeNode = new Tree<>(itemId, item);
nodeMap.put(itemId, treeNode);
}
for (T item : nodeList) {
Object parentId = converter.getParentId(item);
if (parentId == null || !nodeMap.containsKey(parentId)) {
Tree<T> rootNode = nodeMap.get(converter.getItemId(item));
rootNodes.add(rootNode);
} else {
Tree<T> parent = nodeMap.get(parentId);
Tree<T> childNode = nodeMap.get(converter.getItemId(item));
parent.addChild(childNode);
}
}
return rootNodes;
}
public interface TreeConverter<T> {
Object getItemId(T item);
Object getParentId(T item);
}
@Data
public static class Tree<