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);
  }
 }
}

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

(0)

相关推荐

  • Java集合框架之Collection接口详解

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java的集合类主要由两个接口派生而出:Co

  • 详解java8在Collection中新增加的方法removeIf

    记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题.问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就直接说,List的有自带的remove方法,可以直接使用,他说请详细的说明一下,我说写一个for循环,循环的次数是List的长度,然后在循环里面直接删除掉想要删除的元素就可以了. 当时还想,这么简单的问题也问,面试官说,你回去自己试试就知道了,你看按照你说的那样写会不会报错.然后我就懵了,虽然这是个简单的问题但是日常的编码中,我还真没有注

  • 详解JAVA中的Collection接口和其主要实现的类

    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set,详细信息可见官方文档http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/

  • 如何解决Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X

    这两天因为项目需要整合spring.struts2.mybatis三大框架,但启动的时候总出现这个错误,困扰我好久,在网上找到的答案都不是我想要的,今天终于知道原因了. user-mapper.xml如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:/

  • Java Collections.sort()实现List排序的默认方法和自定义方法

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list.add("王硕"); list.add("李明"); list.add("刘迪"); list.add("刘布"); //升序 Collections.sort(list,Collator.getInstance(java.uti

  • Java Collections集合继承结构图_动力节点Java学院整理

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象. 集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象. 集合框架图 Collection (集合的最大接口)继承关系 --List 可以存放重复的内容 --Set 不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个

  • JAVA对list集合进行排序Collections.sort()

    对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序.代码如下: 进行降序排列 进行降序排列 Collections.sort(list, new Comparator<ResultTypeDesc>() { public int compare(ResultTypeDesc o1, ResultTypeDesc o2) { return o2.getRatio().compareTo(o1.getRatio()); } }); 进行升序排列 Collections.sort

  • 详解Java中Collections.sort排序

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

  • 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.uti

  • Java操作集合工具类Collections使用详解

    这篇文章主要介绍了java操作集合工具类Collections使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控制等方法. 排序操作: reverse(List):反转List中元素的顺序: shuffle(List):对List集合元素进行

  • Java使用Collections工具类对List集合进行排序

    这篇文章主要介绍了Java使用Collections工具类对List集合进行排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.说明 使用Collections工具类的sort方法对list进行排序 新建比较器Comparator 二.代码 排序: import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import jav

  • Java中关于Collections集合工具类的详细介绍

    Collections 是一个操作 Set.List 和 Map 等集合的工具类. Collections 中提供了一系列静态的方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控制等方法. 排序操作 reverse(List):反转 List 中元素的顺序 shuffle(List):对 List 集合元素进行随机排序 sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 sort(List,Comparator):根据指定的 C

  • java 集合工具类Collections及Comparable和Comparator排序详解

    目录 一.常用功能 二.Comparator比较器 三.Comparable和Comparator两个接口的区别 四.练习 五.扩展 一.常用功能 java.utils.Collections是集合工具类,用来对集合进行操作. 部分方法如下: public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素. public static void shuffle(List<?> lis

  • Java应用EasyExcel工具类

    一.前言 关于EasyExcel,它对poi做了进一步的封装,使得整个编写流程更加的面向对象.好处嘛,我认为流程上更加清晰即易懂.可读性更好,坏处的话,则是操作上没有原生的方式那么灵活. 二.导入 StudentVo为实体类, 注意实体中的各个属性要和excel按顺序一 一对应,建议都用String类型,真正插入时,才去做转换 ImportExcelListener 类为真正处理数据的类 CommonService 只是一个Spring的service bean,用来执行curd操作 priva

  • java 如何计算同比增长工具类

    java 计算同比增长工具类 为了数据的严谨性,统一装换为BigDecimal,话不多说,看代码. package com.pig4cloud.pigx.admin.api.util; import java.math.BigDecimal; public class PercentCount { public String percentBigDecimal(BigDecimal preNum,BigDecimal sufNum){ double result = countDecimal(p

  • java树结构stream工具类的示例代码详解

    菜单实体类 package com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class Menu { /**

  • Java中RedisUtils工具类的使用

    目录 前言 一.pom.xml引入所需依赖 二.RedisUtils工具类 三.如何使用工具类 四.工具类中批量更新Redis Hash详解 总结 前言 本文将提供一个redis的工具类,可以用在Spring boot以及Spring Cloud项目中,本工具类主要整合了将Redis作为NoSql DB使用时的常用方法,以StringRedisTemplate实例为基础,封装了读取.写入.批量写入多个Redis hash等方法,降低了Redis学习成本,使业务代码更加高效.简洁.优雅. 一.po

  • Java 对象深拷贝工具类的实现

    目录 1. 使用场景 1.1 场景一 1.2 场景二 2. Spring 中的对象拷贝 3. 本工具类中的对象拷贝 3.1 拷贝对象本身(单个) 3.2 拷贝对象本身(批量) 3.3 拷贝对象属性至其他类(单个) 3.4 拷贝对象属性至其他类(批量) 4. 工具类源码 1. 使用场景 我们在Java编码中,有时候可能会经常遇到对象拷贝的场景. 1.1 场景一 当我们更新一个对象的时候,如果要记录对象属性的前后变化,那么在更新对象之前,我们应该首先将对象拷贝暂存起来,且这个时候的拷贝一定是深拷贝(

随机推荐