From 0ca143b0d0de01454f55ac9df39cd30d3a1ee6f1 Mon Sep 17 00:00:00 2001 From: huangchengxing <841396397@qq.com> Date: Mon, 4 Jul 2022 18:32:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0forEachChild=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8CputAllNode=E5=85=81=E8=AE=B8=E5=BF=BD?= =?UTF-8?q?=E7=95=A5key=E4=B8=BAnull=E7=9A=84=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/map/ForestMap.java | 28 +++++++++++++++++-- .../java/cn/hutool/core/map/TreeEntry.java | 4 +-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/map/ForestMap.java b/hutool-core/src/main/java/cn/hutool/core/map/ForestMap.java index 111435a3c..2fa21fe18 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/ForestMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/ForestMap.java @@ -90,17 +90,39 @@ public interface ForestMap extends Map> { * @param values 要添加的值 * @param keyGenerator 从值中获取key的方法 * @param parentKeyGenerator 从值中获取父节点key的方法 + * @param ignoreNullNode 是否获取到的key为null的子节点/父节点 */ default > void putAllNode( - C values, Function keyGenerator, Function parentKeyGenerator) { + C values, Function keyGenerator, Function parentKeyGenerator, boolean ignoreNullNode) { if (CollUtil.isEmpty(values)) { return; } values.forEach(v -> { final K key = keyGenerator.apply(v); final K parentKey = parentKeyGenerator.apply(v); - linkNodes(parentKey, key); - get(key).setValue(v); + + // 不忽略keu为null节点 + boolean hasKey = ObjectUtil.isNotNull(key); + boolean hasParentKey = ObjectUtil.isNotNull(parentKey); + if (!ignoreNullNode || (hasKey && hasParentKey)) { + linkNodes(parentKey, key); + get(key).setValue(v); + return; + } + + // 父子节点的key都为null + if (!hasKey && !hasParentKey) { + return; + } + + // 父节点key为null + if (hasKey) { + putNode(key, v); + return; + } + + // 子节点key为null + putNode(parentKey, null); }); } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/TreeEntry.java b/hutool-core/src/main/java/cn/hutool/core/map/TreeEntry.java index 3c64448c3..a85856873 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/TreeEntry.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/TreeEntry.java @@ -89,6 +89,8 @@ public interface TreeEntry extends Map.Entry { return ObjectUtil.isNotNull(getParent(key)); } + // ===================== 子节点相关方法 ===================== + /** * 获取以当前节点作为根节点的树结构,然后遍历所有节点 * @@ -97,8 +99,6 @@ public interface TreeEntry extends Map.Entry { */ void forEachChild(boolean includeSelf, Consumer> nodeConsumer); - // ===================== 子节点相关方法 ===================== - /** * 获取当前节点直接关联的子节点 *