最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java拓展集合工具類CollectionUtils

 更新時間:2018年03月25日 09:25:19   作者:Smile_Pride  
這篇文章主要為大家詳細(xì)介紹了java拓展集合工具類CollectionUtils,具有一定的參考價值,感興趣的小伙伴們可以參考一下

拓展集合工具類CollectionUtils,供大家參考,具體內(nèi)容如下

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>集合轉(zhuǎn)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>集合轉(zhuǎn)Map</p>
  * <p>比如:List<EmployeeEntity>,講EmployeeEntity的name屬性作為key,轉(zhuǎn)換成Map</p>
  * @param coll 源集合
  * @param keyType 屬性類型
  * @param valueType 源數(shù)據(jù)類型(實體類型)
  * @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>集合轉(zhuǎn)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);
  }
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis的<foreach>以及java代碼的批處理方式

    MyBatis的<foreach>以及java代碼的批處理方式

    這篇文章主要介紹了MyBatis的<foreach>以及java代碼的批處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 8個Spring事務(wù)失效場景詳解

    8個Spring事務(wù)失效場景詳解

    相信大家對Spring種事務(wù)的使用并不陌生,但是你可能只是停留在基礎(chǔ)的使用層面上。今天,我們就簡單來說下Spring事務(wù)的原理,然后總結(jié)一下spring事務(wù)失敗的場景,并提出對應(yīng)的解決方案,需要的可以參考一下
    2022-12-12
  • 解決mybatis竟然報Invalid value for getInt()的問題

    解決mybatis竟然報Invalid value for getInt()的問題

    使用mybatis遇到一個非常奇葩的問題,總是報Invalid value for getInt()的問題,怎么解決呢?下面小編通過場景分析給大家代來了mybatis報Invalid value for getInt()的解決方法,感興趣的朋友參考下吧
    2021-10-10
  • Java?項目中使用遞歸的小結(jié)

    Java?項目中使用遞歸的小結(jié)

    在 Java 中,遞歸是指在方法的定義中調(diào)用自身的過程,遞歸是基于方法調(diào)用棧的原理實現(xiàn)的:當(dāng)一個方法被調(diào)用時,會在調(diào)用棧中創(chuàng)建一個對應(yīng)的棧幀,包含方法的參數(shù)、局部變量和返回地址等信息,這篇文章主要介紹了Java?項目中對使用遞歸的理解分享,需要的朋友可以參考下
    2024-07-07
  • Spring boot啟動流程之解決循環(huán)依賴的方法

    Spring boot啟動流程之解決循環(huán)依賴的方法

    循環(huán)依賴,指的是兩個bean之間相互依賴,形成了一個循環(huán),spring解決循環(huán)依賴的方式是在bean的實例化完成之后,所以不要在構(gòu)造方法中引入循環(huán)依賴,因為這時對象還沒有實例化,spring也無法解決,本文給大家介紹Spring boot循環(huán)依賴的解決方法,一起看看吧
    2024-02-02
  • Java兩個變量的互換(不借助第3個變量)具體實現(xiàn)方法

    Java兩個變量的互換(不借助第3個變量)具體實現(xiàn)方法

    這篇文章主要介紹了Java兩個變量的互換(不借助第3個變量)具體實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • Java?Redisson多策略注解限流

    Java?Redisson多策略注解限流

    這篇文章主要介紹了Java?Redisson多策略注解限流,文章使用Redisson的RRateLimiter進(jìn)行限流,詳細(xì)介紹,感興趣的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • Java 堆內(nèi)存與棧內(nèi)存詳細(xì)介紹

    Java 堆內(nèi)存與棧內(nèi)存詳細(xì)介紹

    這篇文章主要介紹了Java 堆內(nèi)存與棧內(nèi)存詳細(xì)介紹的相關(guān)資料,這里對java 的堆內(nèi)存和棧內(nèi)存進(jìn)行了詳細(xì)的分析,需要的朋友可以參考下
    2016-11-11
  • 一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)

    一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)

    Java工具包提供了強大的數(shù)據(jù)結(jié)構(gòu)。這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中常用的幾種接口和類,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Springboot結(jié)合JDBC實現(xiàn)雙數(shù)據(jù)源實例

    Springboot結(jié)合JDBC實現(xiàn)雙數(shù)據(jù)源實例

    這篇文章主要為大家介紹了Springboot結(jié)合JDBC實現(xiàn)雙數(shù)據(jù)源實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評論

伽师县| 象山县| 太和县| 珠海市| 甘德县| 岳普湖县| 莒南县| 南城县| 金沙县| 昌都县| 黑龙江省| 谢通门县| 新晃| 红原县| 澄迈县| 临湘市| 栾川县| 固镇县| 淳化县| 永州市| 论坛| 茶陵县| 黄山市| 五华县| 沾益县| 天祝| 泌阳县| 陇西县| 龙井市| 逊克县| 上蔡县| 芒康县| 利津县| 宁明县| 织金县| 墨竹工卡县| 海阳市| 唐山市| 城市| 岑巩县| 诸城市|