public class TreeUtils {
/**
* 构建树
*
* @param list 构造树形字典
* @param key 构建树状结构的数据的唯一标识
* @param parentKey 获取上级的唯一标识
* @param isTop 是否是顶级
* @param consumer 遍历出了上级与下级,你想做什么事
* @param <T> 节点的范型
* @param <K> 节点的唯一标识类型
* @return 树状结构
*/
public static <T, K> List<T> buildTree(List<T> list, Function<? super T, ? extends K> key, Function<? super T, ? extends K> parentKey, Predicate<? super T> isTop, BiConsumer<T, T> consumer) {
Map<? extends K, T> map = list.stream().collect(Collectors.toMap(key, i -> i));
// 顶级集合
List<T> topList = new ArrayList<>(16);
list.forEach(item -> {
if (isTop.test(item)) {
topList.add(item);
}
T parent = map.get(parentKey.apply(item));
if (parent != null) {
consumer.accept(parent, item);
}
});
return topList;
}
}
java构建树
于 2023-12-01 14:31:23 首次发布