com.cudrania.core.collection.CollectionUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cudrania Show documentation
Show all versions of cudrania Show documentation
support tools for java development
package com.cudrania.core.collection;
import com.cudrania.core.arrays.ArrayUtils;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* 集合工具类,提供对集合各种扩展操作的支持
*
* @author skyfalling
*/
public class CollectionUtils {
/**
* 判断集合是否为空
*
* @param collection
* @param
* @return
*/
public static boolean isEmpty(Collection collection) {
return collection == null || collection.isEmpty();
}
/**
* 判断集合是否不为空
*
* @param collection
* @param
* @return
*/
public static boolean isNotEmpty(Collection collection) {
return !isEmpty(collection);
}
/**
* 分批处理{@link Iterable}元素
*
* @param iterable 可遍历集合
* @param limit 批量处理元素数量限制
* @param consumer 元素处理对象
*/
public static void doBatch(Iterable iterable, int limit, Consumer> consumer) {
List subList = new ArrayList<>(limit);
for (E e : iterable) {
subList.add(e);
if (subList.size() == limit) {
consumer.accept(subList);
subList = new ArrayList<>(limit);
}
}
if (subList.size() > 0) {
consumer.accept(subList);
}
}
/**
* 将Iterator对象转化成Enumeration对象
*
* @param iterator Iterator对象实例
* @return Enumeration对象实例
*/
public static Enumeration enumeration(Iterator iterator) {
return new Enumeration() {
@Override
public boolean hasMoreElements() {
return iterator.hasNext();
}
@Override
public T nextElement() {
return iterator.next();
}
};
}
/**
* 将Enumeration对象转化成Iterator对象
*
* @param enumeration Enumeration对象实例
* @return Iterator对象实例
*/
public static List list(Enumeration enumeration) {
List list = new ArrayList<>();
while (enumeration.hasMoreElements()) {
list.add(enumeration.nextElement());
}
return list;
}
/**
* 数组转链表
*
* @param array 数组对象
* @return List泛型实例
*/
public static List list(T[] array) {
return Arrays.stream(array).collect(Collectors.toList());
}
/**
* 可枚举对象转链表
*
* @param iterable 可遍历集合
* @return List泛型实例
*/
public static List list(Iterable iterable) {
return list(iterable, Function.identity());
}
/**
* 取元素的某个属性形成新的链表
*
* @param iterable 可遍历集合
* @param func 生成元素的函数
* @param 属性类型的泛型约束
* @return 属性列表
*/
public static List list(Iterable iterable, Function func) {
List list;
if (iterable instanceof Collection) {
list = new ArrayList<>(((Collection) iterable).size());
} else {
list = new ArrayList<>();
}
for (V o : iterable) {
list.add(func.apply(o));
}
return list;
}
/**
* 枚举器转链表
*
* @param iterator 枚举器
* @param
* @return
*/
public static List list(Iterator iterator) {
List list = new ArrayList<>();
while (iterator.hasNext()) {
list.add(iterator.next());
}
return list;
}
/**
* 删除链表从from到to(不包括)索引位置的元素
*
* @param list
* @param from
* @param to
* @param
*/
public static void remove(List list, int from, int to) {
list.subList(from, to).clear();
}
/**
* 删除集合中满足条件的元素
*
* @param list
* @param predicate
* @param
*/
public static void remove(Collection list, Predicate predicate) {
list.removeIf(predicate);
}
/**
* 删除集合中null元素
*
* @param list
* @param
*/
public static void removeNull(Collection list) {
list.removeIf(Objects::isNull);
}
/**
* 删除Map中value为null的键值对
*
* @param map
* @param
* @param
*/
public static void removeNull(Map map) {
map.values().removeIf(Objects::isNull);
}
/**
* 集合转Map,keyGen函数执行结果作为key值,元素本身作为value值
*
* @param iterable 可遍历集合
* @param keyGen 生成key的函数
* @param key的泛型约束
* @param value的泛型约束
*/
public static Map map(Iterable iterable, Function keyGen) {
return map(iterable, keyGen, Function.identity());
}
/**
* 集合转Map,keyGen函数执行结果作为key值,valueGen执行结果作为value值
*
* @param iterable 可遍历集合
* @param keyGen 生成Key的函数
* @param valueGen 作为Value的函数
* @param key的泛型约束
* @param value的泛型约束
* @param 元素的泛型约束
*/
public static Map map(Iterable iterable, Function keyGen, Function valueGen) {
Map map;
if (iterable instanceof Collection) {
map = new HashMap<>(((Collection) iterable).size());
} else {
map = new HashMap<>();
}
for (T obj : iterable) {
map.put(keyGen.apply(obj), valueGen.apply(obj));
}
return map;
}
/**
* 将集合中元素按照指定函数分组
*
* @param iterable 可遍历集合
* @param keyGen 生成key的函数
* @param key的泛型约束
* @param value的泛型约束
*/
public static Map> groupBy(Iterable iterable, Function keyGen) {
return groupBy(iterable, keyGen, Function.identity());
}
/**
* 将集合中元素按照指定函数分组
*
* @param iterable 可遍历集合
* @param keyGen 生成key的函数
* @param key的泛型约束
* @param value的泛型约束
*/
public static Map> groupBy(Iterable iterable, Function keyGen, Function valueGen) {
Map> map;
if (iterable instanceof Collection) {
map = new HashMap<>(((Collection) iterable).size());
} else {
map = new HashMap<>();
}
for (T obj : iterable) {
K keyObj = keyGen.apply(obj);
V valueObj = valueGen.apply(obj);
map.computeIfAbsent(keyObj, (K k) -> new ArrayList<>()).add(valueObj);
}
return map;
}
/**
* 将集合中元素按照数量分组
*
* @param iterable 可遍历集合
* @param limit 每组元素个数
*/
public static List> grouped(Iterable iterable, int limit) {
List> res = new ArrayList<>();
doBatch(iterable, limit, l -> res.add(l));
return res;
}
/**
* 数组对象转列表
*
* @param source
* @return
*/
public static List arrayToList(Object source) {
return (List) Arrays.asList(ArrayUtils.toObjectArray(source));
}
}