当前位置: 首页 > 编程笔记 >

java拓展集合工具类CollectionUtils

裴实
2023-03-14
本文向大家介绍java拓展集合工具类CollectionUtils,包括了java拓展集合工具类CollectionUtils的使用技巧和注意事项,需要的朋友参考一下

拓展集合工具类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);
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 有时候你需要实现自己的集合扩展。也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集。Guava提供了若干工具方法,以便让类似的工作变得更简单。 Forwarding Decorators 针对所有类型的集合接口,Guava都提供了Forwarding抽象类以简化装饰者模式的使用。 Forwarding抽象类定义了一个抽象方法:del

  • 本文向大家介绍Java常用工具类—集合排序,包括了Java常用工具类—集合排序的使用技巧和注意事项,需要的朋友参考一下 一、集合排序概述 1、主要内容 集合中的基本数据类型排序 集合中的字符串排序 Comparator接口 Comparable接口 回顾: 2、集合排序方法 使用Collections类的sort(List list)方法 sort(List list)是根据元素的自然顺序对指定列

  • Guava提供了很多类似java.util.Collections的静态工具类 Guava中工具类与集合的对应关系如下: 集合接口 来自于JDK/Guava 对应的Guava工具类 Collection JDK Collections2 List JDK Lists Set JDK Sets SortedSet JDK Sets Map JDK Maps SortedMap JDK Maps Qu

  • 1. Collections工具类 Collections类概述 针对集合操作 的工具类,里面的方法都是静态的,可以对集合进行排序、二分查找、反转、混排等。 Collection和Collections的区别 Collection:是单列集合的顶层接口,有子接口List和Set。Collections:是针对集合操作的工具类,有对集合进行排序和二分查找等方法 Collections常用方法 pub

  • 本文向大家介绍JAVA集合框架工具类自定义Collections集合方法,包括了JAVA集合框架工具类自定义Collections集合方法的使用技巧和注意事项,需要的朋友参考一下 项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码: 1、封装的自定义集合工具类:CollectionsCustom 2、测试类TestCollections

  • 主要模块 传感器: 热运动传感器 测距传感器 灯光传感器 超声波传感器 声音传感器 温度传感器 双路颜色传感器 运动传感器 MQ2气体传感器 温湿度传感器 磁敏传感器 火焰传感器 土壤湿度传感器 视觉模块 交互: 角度传感器 滑动电位器 按钮 多路触摸 摇杆 输出: 扬声器 电机驱动 舵机驱动 8×16 蓝色LED点阵 彩灯驱动 其他: 红外收发 电源模块 延长模块 RGB灯 蓝牙