今天有时间写了一点集合工具类:
import org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate;
import org.apache.commons.beanutils.BeanToPropertyValueTransformer;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.AllPredicate;
import java.util.*;
/**
* 集合类的工具类
*/
public final class CollectionUtils {
/**
* 私有构造函数,防止误用
*/
private CollectionUtils() {
}
/**
* 判断集合是否为空
*
* @param collection 集合类型的对象
* @param <T> 类型参数
* @return 如果集合对象为空或者集合的size为0就返回true, 否则返回false
*/
public static <T> boolean isNullOrEmpty(Collection<T> collection) {
return collection == null || collection.isEmpty();
}
/**
* 判断是否为一个非空的数组
*
* @param array 传入的数组
* @param <T> 数组的类型参数
* @return 如果数组为null或者数组的长度为0就返回true, 否则返回false
*/
public static <T> boolean isNotNullOrEmptyArray(T[] array) {
return !(array == null || array.length == 0);
}
/**
* 合并所有集合
*
* @param lists List类型的集合
* @param <T> 集合的参数类型
* @return 合并后的集合
*/
public static <T> List<T> mergeAll(List<T>... lists) {
List<T> mergedList = new ArrayList<T>();
for (int i = 0, len = lists.length; i < len; i++) {
List<T> list = lists[i];
if (list != null && !list.isEmpty()) {
for (int j = 0, lenj = list.size(); j < lenj; j++) {
T obj = list.get(j);
if (obj != null) {
mergedList.add(obj);
}
}
}
}
return mergedList;
}
/**
* 用数组创建一个ArrayList
*
* @param objs 元素
* @param <T> 元素的类型
* @return ArrayList
*/
public static <T> List<T> asList(T... objs) {
if (objs == null) {
return Collections.EMPTY_LIST;
}
List<T> list = new ArrayList<T>();
Collections.addAll(list, objs);
return list;
}
/**
* 创建简单Map的快捷方法
*
* @param key 键
* @param value 值
* @param <K> 键的类型
* @param <V> 值的类型
* @return Map
*/
public static <K, V> Map<K, V> makeMap(K key, V value) {
Map<K, V> map = new HashMap<K, V>();
map.put(key, value);
return map;
}
/**
* 创建简单Map的快捷方法
*
* @param key1 键1
* @param value1 值1
* @param key2 键2
* @param value2 值2
* @param <K> 键的类型
* @param <V> 值的类型
* @return Map
*/
public static <K, V> Map<K, V> makeMap(K key1, V value1, K key2, V value2) {
Map<K, V> map = new HashMap<K, V>();
map.put(key1, value1);
map.put(key2, value2);
return map;
}
/**
* 数组包含
*
* @param array 数组
* @param val 被包含值
* @param <T> 类型
* @return 是否包含
*/
public static <T> boolean contains(T[] array, T val) {
for (T t : array) {
if (val.equals(t)) {
return true;
}
}
return false;
}
/**
* 用分隔符将字符串数组连接起来,构成一个字符串
*
* @param words 字符串数组
* @param seperator 分隔符
* @return 返回用分隔符连起来的字符串
*/
public static String join(Object[] words, String seperator) {
StringBuilder sb = new StringBuilder();
if (words != null) {
for (int i = 0; i < words.length; i++) {
sb.append(words[i]);
if (i < words.length - 1) {
sb.append(seperator);
}
}
}
return sb.toString();
}
/**
* 将集合中的元素用分隔符连起来,构成一个字符串
*
* @param collection 集合
* @param seperator 分隔符
* @return 返回用分隔符连起来的字符串
*/
public static String join(Collection<?> collection, String seperator) {
Object[] objs = new Object[collection.size()];
collection.toArray(objs);
return join(objs, seperator);
}
/**
* 根据集合中对象属性值查找元素
*
* @param collection 给定的集合
* @param propertyName 集合中的元素的属性名
* @param propertyValue 集合中元素属性名对应的属性值
* @param <T> 集合的类型参数
* @return 返回匹配的第一个元素
*/
@SuppressWarnings("unchecked")
public static <T> T find(Collection<T> collection, String propertyName, Object propertyValue) {
return (T) org.apache.commons.collections.CollectionUtils.find(collection, new BeanPropertyValueEqualsPredicate(propertyName, propertyValue));
}
/**
* 根据集合中对象属性值查找(多个属性值)
*
* @param collection 给定的集合
* @param propertyValueMap 属性名称-值 map
* @param <T> 集合的类型参数
* @return 匹配的第一个元素
*/
@SuppressWarnings("unchecked")
public static <T> T find(Collection<T> collection, Map<String, Object> propertyValueMap) {
Predicate[] predicates = new BeanPropertyValueEqualsPredicate[propertyValueMap.size()];
Set<String> propertyNameSet = propertyValueMap.keySet();
int index = 0;
for (String propertyName : propertyNameSet) {
predicates[index] = new BeanPropertyValueEqualsPredicate(propertyName, propertyValueMap.get(propertyName));
index++;
}
Predicate allPredicate = new AllPredicate(predicates);
return (T) org.apache.commons.collections.CollectionUtils.find(collection, allPredicate);
}
/**
* 返回由指定属性名字的值构成的ArrayList集合 在集合中取每一个对象,将对象指定属性名的值拿出来,重新构成一个ArrayList
*
* @param collection 给定的集合
* @param propertyName 集合中元素的某一个属性名
* @param <T> 给定集合的类型参数
* @param <PropType> 属性的类型
* @return 返回新的集合ArrayList
*/
public static <T, PropType> Collection<PropType> collect(Collection<T> collection, String propertyName) {
Transformer transformer = new BeanToPropertyValueTransformer(propertyName);
return org.apache.commons.collections.CollectionUtils.collect(collection, transformer);
}
/**
* 复制一个数组
*
* @param sourceArray 要复制的目标数组
* @param <T> 要复制的数组泛型类型
* @return 新的数组
*/
public static <T> T[] copy(T[] sourceArray) {
if (sourceArray == null) {
return null;
}
return Arrays.copyOf(sourceArray, sourceArray.length);
}
}
/**
* Map<String, String>转字符串.
*
* @param map Map<String, String>对象
* @return json字符串
*/
public static String convertMapToJSONString(Map<String, String> map) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("{");
for (String key : map.keySet()) {
stringBuilder.append("\"");
stringBuilder.append(key);
stringBuilder.append("\"");
stringBuilder.append(":");
stringBuilder.append("\"");
stringBuilder.append(map.get(key));
stringBuilder.append("\"");
stringBuilder.append(",");
}
String result = stringBuilder.toString();
if (result.endsWith(",")) {
result = result.substring(0, result.length() - 1);
}
return result + "}";
}
这也是代码优化的第一步。
最新评论
命令: nload
真是个良心站点哇,大公无私,爱了爱了
还可以直接搞一张映射表,存 uid | time | source_index, 第一次直接查对应的 time 选出前100, 第二次直接用 CompleteFuture 去分别用 source_in
干得漂亮,多个朋友堵条路
2021.2.2版本的不适用吧
现在还可以用么
激活码有用,感谢分享
激活码的地址打不开了