Browse Source

add CollectionUtils

zhou-hao 3 years ago
parent
commit
87699e5b0c

+ 5 - 0
hsweb-core/pom.xml

@@ -101,5 +101,10 @@
             <artifactId>hibernate-validator</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>io.projectreactor.addons</groupId>
+            <artifactId>reactor-extra</artifactId>
+        </dependency>
+
     </dependencies>
 </project>

+ 2 - 2
hsweb-core/src/main/java/org/hswebframework/web/aop/MethodInterceptorContext.java

@@ -31,7 +31,7 @@ import java.util.function.Function;
  * AOP拦截到方法的参数上下文,用于获取当前进行操作的方法的各种参数信息,如:当前所在类实例,参数集合,注解
  *
  * @author zhouhao
- * @see 3.0
+ * @since  3.0
  */
 public interface MethodInterceptorContext extends Serializable {
 
@@ -73,7 +73,7 @@ public interface MethodInterceptorContext extends Serializable {
      * 获取全部参数
      *
      * @return 参数集合
-     * @see this#getArgument(String)
+     * @see MethodInterceptorContext#getArgument(String)
      */
     Map<String, Object> getNamedArguments();
 

+ 2 - 5
hsweb-core/src/main/java/org/hswebframework/web/logger/ReactiveLogger.java

@@ -1,6 +1,7 @@
 package org.hswebframework.web.logger;
 
 import lombok.extern.slf4j.Slf4j;
+import org.hswebframework.web.utils.CollectionUtils;
 import org.slf4j.MDC;
 import reactor.core.publisher.*;
 import reactor.util.context.Context;
@@ -20,11 +21,7 @@ public class ReactiveLogger {
     }
 
     public static Function<Context, Context> start(String... keyAndValue) {
-        Map<String, String> map = new HashMap<>();
-        for (int i = 0, len = keyAndValue.length / 2; i < len; i++) {
-            map.put(keyAndValue[i * 2], keyAndValue[i * 2 + 1]);
-        }
-        return start(map);
+        return start(CollectionUtils.pairingArrayMap(keyAndValue));
     }
 
     public static Mono<Void> mdc(String key, String value) {

+ 25 - 0
hsweb-core/src/main/java/org/hswebframework/web/utils/CollectionUtils.java

@@ -0,0 +1,25 @@
+package org.hswebframework.web.utils;
+
+import reactor.function.Consumer3;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.function.Supplier;
+
+public class CollectionUtils {
+
+    @SafeVarargs
+    public static <A> Map<A, A> pairingArrayMap(A... array) {
+        return pairingArray(array, LinkedHashMap::new, Map::put);
+    }
+
+    public static <A, T> T pairingArray(A[] array,
+                                        Supplier<T> supplier,
+                                        Consumer3<T, A, A> mapping) {
+        T container = supplier.get();
+        for (int i = 0, len = array.length / 2; i < len; i++) {
+            mapping.accept(container, array[i * 2], array[i * 2 + 1]);
+        }
+        return container;
+    }
+}

+ 18 - 0
hsweb-core/src/test/java/org/hswebframework/web/utils/CollectionUtilsTest.java

@@ -0,0 +1,18 @@
+package org.hswebframework.web.utils;
+
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+public class CollectionUtilsTest {
+
+    @Test
+    public void test() {
+        Map<Integer, Integer> maps = CollectionUtils.pairingArrayMap(1, 2, 3, 4, 5);
+        assertEquals(2, maps.size());
+        assertEquals(Integer.valueOf(2), maps.get(1));
+        assertEquals(Integer.valueOf(4), maps.get(3));
+    }
+}