From 70f39cb1eecbb742dab0eb517a48a6bab8d0a576 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期四, 29 十二月 2022 15:42:31 +0800
Subject: [PATCH] update 优化 代码生成与框架主体使用相同的主键生成器 全局统一避免问题
---
ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 222 insertions(+), 5 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java
index dbb6f21..fccd9e3 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java
@@ -1,34 +1,251 @@
package com.ruoyi.common.utils;
-import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import java.util.*;
+import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
-public class StreamUtils extends CollStreamUtil {
+/**
+ * stream 娴佸伐鍏风被
+ *
+ * @author Lion Li
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class StreamUtils {
+ /**
+ * 灏哻ollection杩囨护
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param function 杩囨护鏂规硶
+ * @return 杩囨护鍚庣殑list
+ */
public static <E> List<E> filter(Collection<E> collection, Predicate<E> function) {
if (CollUtil.isEmpty(collection)) {
- return Collections.emptyList();
+ return CollUtil.newArrayList();
}
return collection.stream().filter(function).collect(Collectors.toList());
}
- public static <E> String join(Collection<E> collection, Function<E, String> function) {
+ /**
+ * 灏哻ollection鎷兼帴
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param function 鎷兼帴鏂规硶
+ * @return 鎷兼帴鍚庣殑list
+ */
+ public static <E> String join(Collection<E> collection, Function<E, String> function) {
return join(collection, function, ",");
}
- public static <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {
+ /**
+ * 灏哻ollection鎷兼帴
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param function 鎷兼帴鏂规硶
+ * @param delimiter 鎷兼帴绗�
+ * @return 鎷兼帴鍚庣殑list
+ */
+ public static <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {
if (CollUtil.isEmpty(collection)) {
return StringUtils.EMPTY;
}
return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
}
+ /**
+ * 灏哻ollection鎺掑簭
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param comparing 鎺掑簭鏂规硶
+ * @return 鎺掑簭鍚庣殑list
+ */
public static <E> List<E> sorted(Collection<E> collection, Comparator<E> comparing) {
+ if (CollUtil.isEmpty(collection)) {
+ return CollUtil.newArrayList();
+ }
return collection.stream().sorted(comparing).collect(Collectors.toList());
}
+
+ /**
+ * 灏哻ollection杞寲涓虹被鍨嬩笉鍙樼殑map<br>
+ * <B>{@code Collection<V> ----> Map<K,V>}</B>
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param key V绫诲瀷杞寲涓篕绫诲瀷鐨刲ambda鏂规硶
+ * @param <V> collection涓殑娉涘瀷
+ * @param <K> map涓殑key绫诲瀷
+ * @return 杞寲鍚庣殑map
+ */
+ public static <V, K> Map<K, V> toIdentityMap(Collection<V> collection, Function<V, K> key) {
+ if (CollUtil.isEmpty(collection)) {
+ return MapUtil.newHashMap();
+ }
+ return collection.stream().collect(Collectors.toMap(key, Function.identity(), (l, r) -> l));
+ }
+
+ /**
+ * 灏咰ollection杞寲涓簃ap(value绫诲瀷涓巆ollection鐨勬硾鍨嬩笉鍚�)<br>
+ * <B>{@code Collection<E> -----> Map<K,V> }</B>
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param key E绫诲瀷杞寲涓篕绫诲瀷鐨刲ambda鏂规硶
+ * @param value E绫诲瀷杞寲涓篤绫诲瀷鐨刲ambda鏂规硶
+ * @param <E> collection涓殑娉涘瀷
+ * @param <K> map涓殑key绫诲瀷
+ * @param <V> map涓殑value绫诲瀷
+ * @return 杞寲鍚庣殑map
+ */
+ public static <E, K, V> Map<K, V> toMap(Collection<E> collection, Function<E, K> key, Function<E, V> value) {
+ if (CollUtil.isEmpty(collection)) {
+ return MapUtil.newHashMap();
+ }
+ return collection.stream().collect(Collectors.toMap(key, value, (l, r) -> l));
+ }
+
+ /**
+ * 灏哻ollection鎸夌収瑙勫垯(姣斿鏈夌浉鍚岀殑鐝骇id)鍒嗙被鎴恗ap<br>
+ * <B>{@code Collection<E> -------> Map<K,List<E>> } </B>
+ *
+ * @param collection 闇�瑕佸垎绫荤殑闆嗗悎
+ * @param key 鍒嗙被鐨勮鍒�
+ * @param <E> collection涓殑娉涘瀷
+ * @param <K> map涓殑key绫诲瀷
+ * @return 鍒嗙被鍚庣殑map
+ */
+ public static <E, K> Map<K, List<E>> groupByKey(Collection<E> collection, Function<E, K> key) {
+ if (CollUtil.isEmpty(collection)) {
+ return MapUtil.newHashMap();
+ }
+ return collection
+ .stream()
+ .collect(Collectors.groupingBy(key, LinkedHashMap::new, Collectors.toList()));
+ }
+
+ /**
+ * 灏哻ollection鎸夌収涓や釜瑙勫垯(姣斿鏈夌浉鍚岀殑骞寸骇id,鐝骇id)鍒嗙被鎴愬弻灞俶ap<br>
+ * <B>{@code Collection<E> ---> Map<T,Map<U,List<E>>> } </B>
+ *
+ * @param collection 闇�瑕佸垎绫荤殑闆嗗悎
+ * @param key1 绗竴涓垎绫荤殑瑙勫垯
+ * @param key2 绗簩涓垎绫荤殑瑙勫垯
+ * @param <E> 闆嗗悎鍏冪礌绫诲瀷
+ * @param <K> 绗竴涓猰ap涓殑key绫诲瀷
+ * @param <U> 绗簩涓猰ap涓殑key绫诲瀷
+ * @return 鍒嗙被鍚庣殑map
+ */
+ public static <E, K, U> Map<K, Map<U, List<E>>> groupBy2Key(Collection<E> collection, Function<E, K> key1, Function<E, U> key2) {
+ if (CollUtil.isEmpty(collection)) {
+ return MapUtil.newHashMap();
+ }
+ return collection
+ .stream()
+ .collect(Collectors.groupingBy(key1, LinkedHashMap::new, Collectors.groupingBy(key2, LinkedHashMap::new, Collectors.toList())));
+ }
+
+ /**
+ * 灏哻ollection鎸夌収涓や釜瑙勫垯(姣斿鏈夌浉鍚岀殑骞寸骇id,鐝骇id)鍒嗙被鎴愬弻灞俶ap<br>
+ * <B>{@code Collection<E> ---> Map<T,Map<U,E>> } </B>
+ *
+ * @param collection 闇�瑕佸垎绫荤殑闆嗗悎
+ * @param key1 绗竴涓垎绫荤殑瑙勫垯
+ * @param key2 绗簩涓垎绫荤殑瑙勫垯
+ * @param <T> 绗竴涓猰ap涓殑key绫诲瀷
+ * @param <U> 绗簩涓猰ap涓殑key绫诲瀷
+ * @param <E> collection涓殑娉涘瀷
+ * @return 鍒嗙被鍚庣殑map
+ */
+ public static <E, T, U> Map<T, Map<U, E>> group2Map(Collection<E> collection, Function<E, T> key1, Function<E, U> key2) {
+ if (CollUtil.isEmpty(collection) || key1 == null || key2 == null) {
+ return MapUtil.newHashMap();
+ }
+ return collection
+ .stream()
+ .collect(Collectors.groupingBy(key1, LinkedHashMap::new, Collectors.toMap(key2, Function.identity(), (l, r) -> l)));
+ }
+
+ /**
+ * 灏哻ollection杞寲涓篖ist闆嗗悎锛屼絾鏄袱鑰呯殑娉涘瀷涓嶅悓<br>
+ * <B>{@code Collection<E> ------> List<T> } </B>
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param function collection涓殑娉涘瀷杞寲涓簂ist娉涘瀷鐨刲ambda琛ㄨ揪寮�
+ * @param <E> collection涓殑娉涘瀷
+ * @param <T> List涓殑娉涘瀷
+ * @return 杞寲鍚庣殑list
+ */
+ public static <E, T> List<T> toList(Collection<E> collection, Function<E, T> function) {
+ if (CollUtil.isEmpty(collection)) {
+ return CollUtil.newArrayList();
+ }
+ return collection
+ .stream()
+ .map(function)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 灏哻ollection杞寲涓篠et闆嗗悎锛屼絾鏄袱鑰呯殑娉涘瀷涓嶅悓<br>
+ * <B>{@code Collection<E> ------> Set<T> } </B>
+ *
+ * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎
+ * @param function collection涓殑娉涘瀷杞寲涓簊et娉涘瀷鐨刲ambda琛ㄨ揪寮�
+ * @param <E> collection涓殑娉涘瀷
+ * @param <T> Set涓殑娉涘瀷
+ * @return 杞寲鍚庣殑Set
+ */
+ public static <E, T> Set<T> toSet(Collection<E> collection, Function<E, T> function) {
+ if (CollUtil.isEmpty(collection) || function == null) {
+ return CollUtil.newHashSet();
+ }
+ return collection
+ .stream()
+ .map(function)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ }
+
+
+ /**
+ * 鍚堝苟涓や釜鐩稿悓key绫诲瀷鐨刴ap
+ *
+ * @param map1 绗竴涓渶瑕佸悎骞剁殑 map
+ * @param map2 绗簩涓渶瑕佸悎骞剁殑 map
+ * @param merge 鍚堝苟鐨刲ambda锛屽皢key value1 value2鍚堝苟鎴愭渶缁堢殑绫诲瀷,娉ㄦ剰value鍙兘涓虹┖鐨勬儏鍐�
+ * @param <K> map涓殑key绫诲瀷
+ * @param <X> 绗竴涓� map鐨剉alue绫诲瀷
+ * @param <Y> 绗簩涓� map鐨剉alue绫诲瀷
+ * @param <V> 鏈�缁坢ap鐨剉alue绫诲瀷
+ * @return 鍚堝苟鍚庣殑map
+ */
+ public static <K, X, Y, V> Map<K, V> merge(Map<K, X> map1, Map<K, Y> map2, BiFunction<X, Y, V> merge) {
+ if (MapUtil.isEmpty(map1) && MapUtil.isEmpty(map2)) {
+ return MapUtil.newHashMap();
+ } else if (MapUtil.isEmpty(map1)) {
+ map1 = MapUtil.newHashMap();
+ } else if (MapUtil.isEmpty(map2)) {
+ map2 = MapUtil.newHashMap();
+ }
+ Set<K> key = new HashSet<>();
+ key.addAll(map1.keySet());
+ key.addAll(map2.keySet());
+ Map<K, V> map = new HashMap<>();
+ for (K t : key) {
+ X x = map1.get(t);
+ Y y = map2.get(t);
+ V z = merge.apply(x, y);
+ if (z != null) {
+ map.put(t, z);
+ }
+ }
+ return map;
+ }
+
}
--
Gitblit v1.9.3