From 0ee5fd1ac07005876e7bc2223f578c22096fc638 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期二, 05 七月 2022 19:00:10 +0800 Subject: [PATCH] fix 修复 hutool 工具返回不可操纵类型 导致报错问题 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 214 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 0c59809..0de2784 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,11 +1,12 @@ 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; @@ -16,27 +17,235 @@ * @author Lion Li */ @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class StreamUtils extends CollStreamUtil { +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, 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, Collectors.groupingBy(key2, 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, 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