From ad847473401730c14a5d667bd06afcb7d4575eb6 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期四, 22 二月 2024 09:33:40 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java | 40 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java index fe7d834..fca97c6 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java @@ -10,6 +10,7 @@ import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Function; +import java.util.function.Predicate; /** * Created by vincent on 2023/3/14 @@ -48,6 +49,45 @@ return result; } +// public static <T> List<T> treeRemove(List<T> data, String condition, +// Function<? super T, ? extends String> fetcher, +// Function<T, List<T>> childrenGetter, +// BiConsumer<T, List<T>> childrenSetter) { +// List<T> result = new ArrayList<>(); +// for (T node : data) { +// List<T> children = childrenGetter.apply(node); +// +// if (children != null && !children.isEmpty()) { +// List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter); +// childrenSetter.accept(node, newChildren); +// } +// +// if (fetcher.apply(node).contains(condition)) { +// result.add(node); +// } +// } +// return result; +// } + + public static <T> List<T> treeRemove(List<T> data, String condition, + Function<? super T, ? extends String> fetcher, + Function<T, List<T>> childrenGetter, + BiConsumer<T, List<T>> childrenSetter) { + List<T> result = new ArrayList<>(); + Predicate<T> predicate = node -> fetcher.apply(node).contains(condition); + for (T node : data) { + List<T> children = childrenGetter.apply(node); + if (children != null && !children.isEmpty()) { + List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter); + childrenSetter.accept(node, newChildren); + } + if (predicate.test(node)) { + result.add(node); + } + } + return result; + } + /** * 鏁扮粍鍊掑簭 * @param bytes -- Gitblit v1.9.1