fix 修复反馈不可操纵类型导致后续操纵报错问题

add 新增 filter sorted joining 方法
This commit is contained in:
疯狂的狮子Li 2022-07-05 10:55:25 +00:00 committed by Gitee
parent a9310c2d30
commit dc0d9591c9
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

View File

@ -22,7 +22,7 @@ import java.util.stream.Collectors;
/** /**
* 集合的stream操作封装 * 集合的stream操作封装
* *
* @author 528910437@QQ.COM, VampireAchao<achao1441470436@gmail.com> * @author 528910437@QQ.COM, VampireAchao<achao1441470436@gmail.com>Lion Li>
* @since 5.5.2 * @since 5.5.2
*/ */
public class CollStreamUtil { public class CollStreamUtil {
@ -55,7 +55,7 @@ public class CollStreamUtil {
*/ */
public static <V, K> Map<K, V> toIdentityMap(Collection<V> collection, Function<V, K> key, boolean isParallel) { public static <V, K> Map<K, V> toIdentityMap(Collection<V> collection, Function<V, K> key, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return toMap(collection, (v) -> Opt.ofNullable(v).map(key).get(), Function.identity(), isParallel); return toMap(collection, (v) -> Opt.ofNullable(v).map(key).get(), Function.identity(), isParallel);
} }
@ -88,7 +88,7 @@ public class CollStreamUtil {
*/ */
public static <E, K, V> Map<K, V> toMap(Collection<E> collection, Function<E, K> key, Function<E, V> value, boolean isParallel) { public static <E, K, V> Map<K, V> toMap(Collection<E> collection, Function<E, K> key, Function<E, V> value, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return StreamUtil.of(collection, isParallel) return StreamUtil.of(collection, isParallel)
.collect(HashMap::new, (m, v) -> m.put(key.apply(v), value.apply(v)), HashMap::putAll); .collect(HashMap::new, (m, v) -> m.put(key.apply(v), value.apply(v)), HashMap::putAll);
@ -122,7 +122,7 @@ public class CollStreamUtil {
*/ */
public static <E, K> Map<K, List<E>> groupByKey(Collection<E> collection, Function<E, K> key, boolean isParallel) { public static <E, K> Map<K, List<E>> groupByKey(Collection<E> collection, Function<E, K> key, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return groupBy(collection, key, Collectors.toList(), isParallel); return groupBy(collection, key, Collectors.toList(), isParallel);
} }
@ -160,7 +160,7 @@ public class CollStreamUtil {
public static <E, K, U> Map<K, Map<U, List<E>>> groupBy2Key(Collection<E> collection, Function<E, K> key1, public static <E, K, U> Map<K, Map<U, List<E>>> groupBy2Key(Collection<E> collection, Function<E, K> key1,
Function<E, U> key2, boolean isParallel) { Function<E, U> key2, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return groupBy(collection, key1, CollectorUtil.groupingBy(key2, Collectors.toList()), isParallel); return groupBy(collection, key1, CollectorUtil.groupingBy(key2, Collectors.toList()), isParallel);
} }
@ -197,7 +197,7 @@ public class CollStreamUtil {
public static <E, T, U> Map<T, Map<U, E>> group2Map(Collection<E> collection, public static <E, T, U> Map<T, Map<U, E>> group2Map(Collection<E> collection,
Function<E, T> key1, Function<E, U> key2, boolean isParallel) { Function<E, T> key1, Function<E, U> key2, boolean isParallel) {
if (CollUtil.isEmpty(collection) || key1 == null || key2 == null) { if (CollUtil.isEmpty(collection) || key1 == null || key2 == null) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return groupBy(collection, key1, CollectorUtil.toMap(key2, Function.identity(), (l, r) -> l), isParallel); return groupBy(collection, key1, CollectorUtil.toMap(key2, Function.identity(), (l, r) -> l), isParallel);
} }
@ -235,7 +235,7 @@ public class CollStreamUtil {
public static <E, K, V> Map<K, List<V>> groupKeyValue(Collection<E> collection, Function<E, K> key, public static <E, K, V> Map<K, List<V>> groupKeyValue(Collection<E> collection, Function<E, K> key,
Function<E, V> value, boolean isParallel) { Function<E, V> value, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return groupBy(collection, key, Collectors.mapping(v -> Opt.ofNullable(v).map(value).orElse(null), Collectors.toList()), isParallel); return groupBy(collection, key, Collectors.mapping(v -> Opt.ofNullable(v).map(value).orElse(null), Collectors.toList()), isParallel);
} }
@ -254,7 +254,7 @@ public class CollStreamUtil {
*/ */
public static <E, K, D> Map<K, D> groupBy(Collection<E> collection, Function<E, K> key, Collector<E, ?, D> downstream) { public static <E, K, D> Map<K, D> groupBy(Collection<E> collection, Function<E, K> key, Collector<E, ?, D> downstream) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return groupBy(collection, key, downstream, false); return groupBy(collection, key, downstream, false);
} }
@ -275,7 +275,7 @@ public class CollStreamUtil {
*/ */
public static <E, K, D> Map<K, D> groupBy(Collection<E> collection, Function<E, K> key, Collector<E, ?, D> downstream, boolean isParallel) { public static <E, K, D> Map<K, D> groupBy(Collection<E> collection, Function<E, K> key, Collector<E, ?, D> downstream, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} }
return StreamUtil.of(collection, isParallel).collect(CollectorUtil.groupingBy(key, downstream)); return StreamUtil.of(collection, isParallel).collect(CollectorUtil.groupingBy(key, downstream));
} }
@ -307,7 +307,7 @@ public class CollStreamUtil {
*/ */
public static <E, T> List<T> toList(Collection<E> collection, Function<E, T> function, boolean isParallel) { public static <E, T> List<T> toList(Collection<E> collection, Function<E, T> function, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptyList(); return CollUtil.newArrayList();
} }
return StreamUtil.of(collection, isParallel) return StreamUtil.of(collection, isParallel)
.map(function) .map(function)
@ -342,7 +342,7 @@ public class CollStreamUtil {
*/ */
public static <E, T> Set<T> toSet(Collection<E> collection, Function<E, T> function, boolean isParallel) { public static <E, T> Set<T> toSet(Collection<E> collection, Function<E, T> function, boolean isParallel) {
if (CollUtil.isEmpty(collection)) { if (CollUtil.isEmpty(collection)) {
return Collections.emptySet(); return CollUtil.newHashSet();
} }
return StreamUtil.of(collection, isParallel) return StreamUtil.of(collection, isParallel)
.map(function) .map(function)
@ -365,11 +365,11 @@ public class CollStreamUtil {
*/ */
public static <K, X, Y, V> Map<K, V> merge(Map<K, X> map1, Map<K, Y> map2, BiFunction<X, Y, V> merge) { 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)) { if (MapUtil.isEmpty(map1) && MapUtil.isEmpty(map2)) {
return Collections.emptyMap(); return MapUtil.newHashMap();
} else if (MapUtil.isEmpty(map1)) { } else if (MapUtil.isEmpty(map1)) {
map1 = Collections.emptyMap(); map1 = MapUtil.newHashMap();
} else if (MapUtil.isEmpty(map2)) { } else if (MapUtil.isEmpty(map2)) {
map2 = Collections.emptyMap(); map2 = MapUtil.newHashMap();
} }
Set<K> key = new HashSet<>(); Set<K> key = new HashSet<>();
key.addAll(map1.keySet()); key.addAll(map1.keySet());
@ -385,4 +385,58 @@ public class CollStreamUtil {
} }
return map; return map;
} }
/**
* 将collection过滤
*
* @param collection 需要转化的集合
* @param function 过滤方法
* @return 过滤后的list
*/
public static <E> List<E> filter(Collection<E> collection, Predicate<E> function) {
if (CollUtil.isEmpty(collection)) {
return CollUtil.newArrayList();
}
return collection.stream().filter(function).collect(Collectors.toList());
}
/**
* 将collection拼接
*
* @param collection 需要转化的集合
* @param function 拼接方法
* @return 拼接后的list
*/
public static <E> String join(Collection<E> collection, Function<E, String> function) {
return join(collection, function, ",");
}
/**
* 将collection拼接
*
* @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 StrUtil.EMPTY;
}
return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
}
/**
* 将collection排序
*
* @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());
}
} }