From 4693b7bc9788db2880c826a3e5d670cd01c8d4eb Mon Sep 17 00:00:00 2001 From: emptypoint <1215582715@qq.com> Date: Sun, 18 Sep 2022 22:46:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=B9=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=B8=BAnull=E6=97=B6=E7=9A=84=E5=9C=BA=E6=99=AF;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/stream/EasyStream.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java index b100d14f1..bbda79b8c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java @@ -1,10 +1,10 @@ package cn.hutool.core.stream; -import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjUtil; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -317,21 +317,27 @@ public class EasyStream extends AbstractEnhancedWrappedStream nodeList = toList(); + // 根据 父id 分组,让key为null的组中全是根节点 + final Function pIdClassifier = node -> { + R parentId = pIdGetter.apply(node); + // 父id为null(另类的根节点),或者是根节点 + if (parentId == null || parentPredicate.test(node)) { + return null; + } + return parentId; + }; // 父id 关联的 子节点列表 - final Map> pId2ChildrenMap = of(nodeList).group(pIdGetter); - List parents = ListUtil.of(); + final Map> pId2ChildrenMap = of(nodeList).group(pIdClassifier); of(nodeList, true).forEach(node -> { - if (parentPredicate.test(node)) { - parents.add(node); - } // 设置 该节点的子节点列表 final List children = pId2ChildrenMap.get(idGetter.apply(node)); if (children != null) { childrenSetter.accept(node, children); } }); - return parents; + // 返回根节点列表 + return pId2ChildrenMap.getOrDefault(null, Collections.emptyList()); } /**