All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.map.TreeEntry Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.core.map;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;

import java.util.Map;
import java.util.function.Consumer;

/**
 * 允许拥有一个父节点与多个子节点的{@link Map.Entry}实现,
 * 表示一个以key作为唯一标识,并且可以挂载一个对应值的树节点,
 * 提供一些基于该节点对其所在树结构进行访问的方法
 *
 * @param  节点的key类型
 * @param  节点的value类型
 * @author huangchengxing
 * @see ForestMap
 */
public interface TreeEntry extends Map.Entry {

	// ===================== Entry方法的重定义 =====================

	/**
	 * 比较目标对象与当前{@link TreeEntry}是否相等。
* 默认只要{@link TreeEntry#getKey()}的返回值相同,即认为两者相等 * * @param o 目标对象 * @return 是否 */ @Override boolean equals(Object o); /** * 返回当前{@link TreeEntry}的哈希值。
* 默认总是返回{@link TreeEntry#getKey()}的哈希值 * * @return 哈希值 */ @Override int hashCode(); // ===================== 父节点相关方法 ===================== /** * 获取以当前节点作为叶子节点的树结构,然后获取当前节点与根节点的距离 * * @return 当前节点与根节点的距离 */ int getWeight(); /** * 获取以当前节点作为叶子节点的树结构,然后获取该树结构的根节点 * * @return 根节点 */ TreeEntry getRoot(); /** * 当前节点是否存在直接关联的父节点 * * @return 是否 */ default boolean hasParent() { return ObjectUtil.isNotNull(getDeclaredParent()); } /** * 获取当前节点直接关联的父节点 * * @return 父节点,当节点不存在对应父节点时返回null */ TreeEntry getDeclaredParent(); /** * 获取以当前节点作为叶子节点的树结构,然后获取该树结构中当前节点的指定父节点 * * @param key 指定父节点的key * @return 指定父节点,当不存在时返回null */ TreeEntry getParent(K key); /** * 获取以当前节点作为叶子节点的树结构,然后确认该树结构中当前节点是否存在指定父节点 * * @param key 指定父节点的key * @return 是否 */ default boolean containsParent(K key) { return ObjectUtil.isNotNull(getParent(key)); } // ===================== 子节点相关方法 ===================== /** * 获取以当前节点作为根节点的树结构,然后遍历所有节点 * * @param includeSelf 是否处理当前节点 * @param nodeConsumer 对节点的处理 */ void forEachChild(boolean includeSelf, Consumer> nodeConsumer); /** * 获取当前节点直接关联的子节点 * * @return 节点 */ Map> getDeclaredChildren(); /** * 获取以当前节点作为根节点的树结构,然后获取该树结构中的当前节点的全部子节点 * * @return 节点 */ Map> getChildren(); /** * 当前节点是否有子节点 * * @return 是否 */ default boolean hasChildren() { return CollUtil.isNotEmpty(getDeclaredChildren()); } /** * 获取以当前节点作为根节点的树结构,然后获取该树结构中的当前节点的指定子节点 * * @param key 指定子节点的key * @return 节点 */ TreeEntry getChild(K key); /** * 获取以当前节点作为根节点的树结构,然后确认该树结构中当前节点是否存在指定子节点 * * @param key 指定子节点的key * @return 是否 */ default boolean containsChild(K key) { return ObjectUtil.isNotNull(getChild(key)); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy