From 074513acdfed38c8537a046801ee5dbc8f01e2eb Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 22 二月 2024 10:06:42 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java |   26 +++++++++++---------------
 1 files changed, 11 insertions(+), 15 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 fca97c6..0ac4c2a 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
@@ -6,11 +6,11 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 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
@@ -69,23 +69,19 @@
 //        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);
+    public static <T> void treeRemove(List<T> list, String condition, Function<? super T, ? extends String> fetcher, Function<T, List<T>> childrenGetter) {
+        Iterator<T> iterator = list.iterator();
+        while (iterator.hasNext()) {
+            T next = iterator.next();
+            List<T> children = childrenGetter.apply(next);
             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);
+                treeRemove(children, condition, fetcher, childrenGetter);
+            } else {
+                if (!fetcher.apply(next).contains(condition)) {
+                    iterator.remove();
+                }
             }
         }
-        return result;
     }
 
     /**

--
Gitblit v1.9.1