首页 > 编程 > Java > 正文

java拓展集合工具类CollectionUtils

2019-11-26 10:09:48
字体:
来源:转载
供稿:网友

拓展集合工具类CollectionUtils,供大家参考,具体内容如下

package com.demo.utils;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.LinkedHashSet;import java.util.List;import java.util.Map;import java.util.Set;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.demo.bean.EmployeeEntity;/** *  * <p>自定义集合工具类拓展常用方法</p> * @autho 董杨炀 * @time 2017-4-10 上午11:33:36 */public class CollectionUtils extends org.apache.commons.collections.CollectionUtils { private static final Logger LOGGER = LoggerFactory.getLogger(CollectionUtils.class); private static final int DEFAULT_SIZE = 1000; /**  *   * <p>拆分List为固定大小的多个集合</p>  * <p>推荐使用</p>  * <p>返回集合的size越小,此方法性能越高</p>  * @param baseList  * @param size  * @return ArrayList  * @autho 董杨炀  * @time 2017-4-10 上午11:30:43  */ @SuppressWarnings("unchecked") public static <T> List<List<T>> fastSplitList(List<T> baseList, int size) {  if (baseList == null || baseList.size() == 0) {   return null;  }  if (size <= 0) {   size = DEFAULT_SIZE;  }  int arrSize = baseList.size() % size == 0 ? baseList.size() / size : baseList.size() / size + 1;  List<List<T>> resultList = new ArrayList<List<T>>();  for (int i = 0; i < arrSize; i++) {   if (arrSize - 1 == i) {    resultList.add((List<T>) new ArrayList<Object>( baseList.subList(i * size, baseList.size())));   } else {    resultList.add((List<T>) new ArrayList<Object>( baseList.subList(i * size, size * (i + 1))));   }  }  return resultList; } /**  *   * <p>拆分List为固定大小的多个集合</p>  * <p>返回集合的size越大,此方法性能越高</p>  * @param baseList  * @param size  * @return ArrayList  * @autho 董杨炀  * @time 2017-4-10 上午11:30:43  */ public static <T> List<List<T>> splitList(List<T> baseList, int size) {  if (baseList == null || baseList.size() == 0) {   return null;  }  if (size <= 0) {   size = DEFAULT_SIZE;  }  List<List<T>> resultList = new ArrayList<List<T>>();  for (int i = 0; i < baseList.size(); ++i) {   if (i % size == 0) {    List<T> result = new ArrayList<T>();    resultList.add(result);   }   resultList.get(i / size).add(baseList.get(i));  }  return resultList; } /**  *   * <p>集合转Set</p>  * @param coll 源集合  * @param keyType 属性类型  * @param keyMethodName 属性get方法  * @return LinkedHashSet  * @autho 董杨炀  * @time 2017-4-10 上午11:31:50  */ public static <K, V> Set<K> asSet(final java.util.Collection<V> coll,final Class<K> keyType   ,final String keyMethodName) {  if (CollectionUtils.isEmpty(coll)) {   return new HashSet<K>(0);  }  final Set<K> set = new LinkedHashSet<K>(coll.size());  try {   for (final V value : coll) {    Object object;    Method method = value.getClass().getMethod(keyMethodName);    object = method.invoke(value);    @SuppressWarnings("unchecked")    final K key = (K) object;    set.add(key);   }  } catch (Exception e) {   LOGGER.error(e.getMessage(), e);   throw new CollectionUtilsException("Collection conversion Set exceptions");  }  return set; } /**  *   * <p>集合转Map</p>  * <p>比如:List<EmployeeEntity>,讲EmployeeEntity的name属性作为key,转换成Map</p>  * @param coll 源集合  * @param keyType 属性类型  * @param valueType 源数据类型(实体类型)  * @param keyMethodName 属性get方法  * @return LinkedHashMap  * @autho 董杨炀  * @time 2017-4-10 上午11:32:01  */ public static <K, V> Map<K, V> asMap(final java.util.Collection<V> coll,final Class<K> keyType   ,final Class<V> valueType,final String keyMethodName) {  if (CollectionUtils.isEmpty(coll)) {   return new LinkedHashMap<K, V>(0);  }  final Map<K, V> map = new LinkedHashMap<K, V>(coll.size());  try {   Method method = valueType.getMethod(keyMethodName);   for (final V value : coll) {    Object object;    object = method.invoke(value);    @SuppressWarnings("unchecked")    final K key = (K) object;    map.put(key, value);   }  } catch (Exception e) {   LOGGER.error(e.getMessage(), e);   throw new CollectionUtilsException("Collection conversion Map exceptions");  }  return map; } /**  *   * <p>集合转List</p>  * @param coll  * @return ArrayList  * @autho 董杨炀  * @time 2017-4-10 上午11:32:56  */ public static <V> List<V> asList(final java.util.Collection<V> coll) {  if (CollectionUtils.isEmpty(coll)) {   return new ArrayList<V>(0);  }  final List<V> list = new ArrayList<V>();  for (final V value : coll) {   if (value != null) {    list.add(value);   }  }  return list; } /**  * <p>集合<String>toString</p>  * @param collection 泛型必须为String类型  * @param split 比如连接符","  * @return  * @autho 董杨炀  * @time 2017-4-10 下午3:22:24  */ public static String collToString(Collection<String> collection, String split) {  StringBuilder sb = new StringBuilder();  if (collection != null) {   int i = 0, size = collection.size();   for (Iterator<String> iterator = collection.iterator(); iterator.hasNext();) {    String str = iterator.next();    sb.append(str);    if (++i < size) {     sb.append(split);    }   }  }  return sb.toString(); } static class CollectionUtilsException extends RuntimeException{  private static final long serialVersionUID = 1L;  public CollectionUtilsException(String s) {   super(s);  }  public CollectionUtilsException(String s, Throwable e) {   super(s, e);  }  public CollectionUtilsException(Throwable e) {   super(e);  } } public static void main(String[] args) {  List<String> baseList = new ArrayList<String>(1000000);  for (int i = 0; i < 1000000; i++) {   baseList.add("data:"+" i");  }  long currentTimeMillis1 = System.currentTimeMillis();  List<List<String>> splitList = splitList(baseList, 1000);  long currentTimeMillis2 = System.currentTimeMillis();  System.out.println(splitList.size());  System.out.println("切割完成时间为:"+String.valueOf(currentTimeMillis2-currentTimeMillis1)+"毫秒");  long currentTimeMillis3 = System.currentTimeMillis();  List<List<String>> newList = fastSplitList(baseList,1000);  long currentTimeMillis4 = System.currentTimeMillis();  System.out.println(newList.size());  System.out.println("快速切割完成时间为:"+String.valueOf(currentTimeMillis4-currentTimeMillis3)+"毫秒");  List<EmployeeEntity> employeeList = new ArrayList<EmployeeEntity>();  for (int i = 1; i < 11; i++) {   EmployeeEntity entity = new EmployeeEntity();   entity.setName("名字"+String.valueOf(i));   employeeList.add(entity);  }  System.out.println(employeeList.size());  Set<String> set = CollectionUtils.asSet(employeeList, String.class, "getName");  for (String name : set) {   System.out.println(name);  }  Map<String, EmployeeEntity> map = CollectionUtils.asMap(employeeList, String.class, EmployeeEntity.class, "getName");  Set<String> keySet = map.keySet();  for (String key : keySet) {   System.out.println(key);   System.out.println(map.get(key));  }  List<EmployeeEntity> list = CollectionUtils.asList(map.values());  for (EmployeeEntity employeeEntity : list) {   System.out.println(employeeEntity);  } }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表