集合工具类,提供数组转LIST、数组转SET、合并集合、计算笛卡儿积等方法。

源码如下:(点击下载 -  CollectionUtil.javaArrayUtil.javacommons-lang-2.6.jarcommons-collections4-4.0.jar)

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.LinkedHashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7. import org.apache.commons.collections4.CollectionUtils;
  8. import org.apache.commons.lang.ArrayUtils;
  9.  
  10. /**
  11. * 集合工具类
  12. *
  13. */
  14. public class CollectionUtil {
  15.  
  16. private static transient final String DEFAULT_SPLIT_STR = ",";
  17.  
  18. /**
  19. * 数组转列表
  20. *
  21. * @param arr
  22. * an array of T objects.
  23. * @param <T>
  24. * a T object.
  25. * @return a {@link java.util.List} object.
  26. */
  27. public static final <T> List<T> array2List(T[] arr) {
  28. if (ArrayUtils.isEmpty(arr)) {
  29. return null;
  30. }
  31. return Arrays.asList(arr);
  32. }
  33.  
  34. /**
  35. * 数组转SET
  36. *
  37. * @param arr
  38. * an array of T objects.
  39. * @param <T>
  40. * a T object.
  41. * @return a {@link java.util.Set} object.
  42. */
  43. public static final <T> Set<T> array2Set(T[] arr) {
  44. if (ArrayUtils.isEmpty(arr)) {
  45. return null;
  46. }
  47. return new LinkedHashSet<T>(Arrays.asList(arr));
  48. }
  49.  
  50. /**
  51. * 合并集合
  52. *
  53. * @param collections
  54. * a {@link java.util.Collection} object.
  55. * @param <T>
  56. * a T object.
  57. * @return a {@link java.util.List} object.
  58. */
  59. @SuppressWarnings("unchecked")
  60. public static final <T> List<T> collections2List(
  61. Collection<T>... collections) {
  62. if (ArrayUtils.isEmpty(collections)) {
  63. return null;
  64. }
  65.  
  66. final List<T> li = new ArrayList<T>();
  67. for (Collection<T> foo : collections) {
  68. if (CollectionUtils.isNotEmpty(foo)) {
  69. li.addAll(foo);
  70. }
  71. }
  72. return li;
  73. }
  74.  
  75. /**
  76. * 合并集合
  77. *
  78. * @param collections
  79. * a {@link java.util.Collection} object.
  80. * @param <T>
  81. * a T object.
  82. * @return a {@link java.util.Set} object.
  83. */
  84. @SuppressWarnings("unchecked")
  85. public static final <T> Set<T> collections2Set(Collection<T>... collections) {
  86. if (ArrayUtils.isEmpty(collections)) {
  87. return null;
  88. }
  89. final Set<T> set = new LinkedHashSet<T>();
  90. for (Collection<T> foo : collections) {
  91. if (CollectionUtils.isNotEmpty(foo)) {
  92. set.addAll(foo);
  93. }
  94. }
  95. return set;
  96. }
  97.  
  98. /**
  99. * 拼接集合字符串
  100. *
  101. * @param collection
  102. * a {@link java.util.Collection} object.
  103. * @param joinStr
  104. * a {@link java.lang.String} object.
  105. * @return a {@link java.lang.String} object.
  106. */
  107. @SuppressWarnings({ "unchecked", "rawtypes" })
  108. public static final String join(final Collection collection, final String joinStr) {
  109. if (CollectionUtils.isEmpty(collection)) {
  110. return "";
  111. }
  112. if (joinStr == null) {
  113. throw new IllegalArgumentException("join string is null.");
  114. }
  115.  
  116. Object[] arr = ArrayUtil.toArray(collection, Object.class);
  117. return ArrayUtil.join(arr, joinStr);
  118. }
  119.  
  120. /**
  121. * 拼接集合字符串
  122. *
  123. * @param collection
  124. * a {@link java.util.Collection} object.
  125. * @return a {@link java.lang.String} object.
  126. */
  127. @SuppressWarnings("rawtypes")
  128. public static final String join(final Collection collection) {
  129. return join(collection, DEFAULT_SPLIT_STR);
  130. }
  131.  
  132. /**
  133. * 计算笛卡儿积
  134. *
  135. * @param crossArgs
  136. * a {@link java.util.List} object.
  137. * @param <T>
  138. * a T object.
  139. * @return a {@link java.util.List} object.
  140. */
  141. public static <T> List<List<T>> decartes(List<List<T>> crossArgs) {
  142.  
  143. // 计算出笛卡尔积行数
  144. int rows = crossArgs.size() > 0 ? 1 : 0;
  145.  
  146. for (List<T> data : crossArgs) {
  147. rows *= data.size();
  148. }
  149.  
  150. // 笛卡尔积索引记录
  151. int[] record = new int[crossArgs.size()];
  152.  
  153. List<List<T>> results = new ArrayList<List<T>>();
  154.  
  155. // 产生笛卡尔积
  156. for (int i = 0; i < rows; i++) {
  157. List<T> row = new ArrayList<T>();
  158.  
  159. // 生成笛卡尔积的每组数据
  160. for (int index = 0; index < record.length; index++) {
  161. row.add(crossArgs.get(index).get(record[index]));
  162. }
  163.  
  164. results.add(row);
  165. crossRecord(crossArgs, record, crossArgs.size() - 1);
  166. }
  167.  
  168. return results;
  169. }
  170.  
  171. /**
  172. * @param sourceArgs
  173. * @param record
  174. * @param level
  175. */
  176. private static <T> void crossRecord(List<List<T>> sourceArgs, int[] record, int level) {
  177. record[level] = record[level] + 1;
  178.  
  179. if (record[level] >= sourceArgs.get(level).size() && level > 0) {
  180. record[level] = 0;
  181. crossRecord(sourceArgs, record, level - 1);
  182. }
  183. }
  184.  
  185. /**
  186. * 从list中取得某段数据
  187. *
  188. * @param <T>
  189. * @param datas
  190. * @param page
  191. * @param PAGESIZE
  192. * @return
  193. */
  194. public static <T> List<T> getLimit(List<T> datas, int begin, int end) {
  195. List<T> objects = new ArrayList<T>();
  196. if (datas.size() <= begin) {
  197. return objects;
  198. }
  199. int temp = (datas.size() > end) ? end : datas.size();
  200. for (int i = begin; i < temp; i++) {
  201. objects.add(datas.get(i));
  202. }
  203. return objects;
  204. }
  205.  
  206. }

集合工具类 - CollectionUtil.java的更多相关文章

  1. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  2. 集合-强大的集合工具类:java.util.Collections中未包含的集合工具

    任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.Guava沿着这些路线提供了更多的工具方法:适用于所有集合的静态方法.这是Guava最流行和成熟 ...

  3. [Google Guava] 强大的集合工具类:java.util.Collections中未包含的集合工具

    转载的,有问题请联系我 原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collecti ...

  4. Collections集合工具类常用的方法

    java.utils.Collections //是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean addAll(Collection& ...

  5. java之集合工具类Collections

    Collections类简介 java.utils.Collections 是集合工具类,用来对集合进行操作.此类完全由在 collection 上进行操作或返回 collection 的静态方法组成 ...

  6. java第十九天,Collections集合工具类的使用

    Collections Java中集合都实现了Collection接口,那么针对集合一些特定的功能,有没有一个接口或类能够统一的集成一些集合必要的功能呢?当然能.它就是--Collections集合工 ...

  7. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

    集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. ...

  8. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  9. 实用的 集合工具类 和 String工具类

    集合工具类:CollectionUtil method: 1.isNotEmpty() 不为空 2.isEmpty() 为空 举例:map集合         Map<String,String ...

随机推荐

  1. 标准I/O的替代软件

    标准I/O并不完善. 标准I/O库的一个不足之处是效率不高,这与它需要复制的数据量有关.当使用每次一行函数fgets和fputs时,通常需要复制两次数据:一次是在内核和标准I/O缓冲之间(当调用rea ...

  2. vim中的一些高级命令的使用

    现在一般在windows下面对txt文档操作的时候,我一般使用gvim软件来操作,虽然没有unix/linu下面的正宗,并且很多命令没有,但是还是有很多方便之处的 下面是重温vim命令时,我我自己以前 ...

  3. [置顶] c#对于文件的操作

    在system.iO:命名空间中提供了两种遍历枚举文件夹的类,Directory 和DirectoryInfo, 他们都有一个方法GetDirectories():来便利枚举文件夹, /// < ...

  4. Python之路【第二十四篇】:Python学习路径及练手项目合集

      Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...

  5. c#之内置类型

    内置类型:就是.NET Framework System命名空间中写好的类型. 下面看看C#都有哪些内置类型 上面的内置类型,除了string和object外,其他的都被称作简单类型.也可以把左边的看 ...

  6. jquery 可拖动进度条

    实现这个效果怎么弄呢? <!DOCTYPE html> <html> <head lang="en"> <meta charset=&qu ...

  7. Oracle+FluentData+MVC4+EasyUI开发权限管理系统之开篇

    在园子里有很多EF+MVC+EasyUI的框架实在是太多了,经过在一段时间的学习高手写的思路,但是都是针对Sql数据的,但是今年我当上研发组组长的第一个任务就是编写一个通用平台框架,一刚开始想把学习过 ...

  8. ListView 实现多选/单选

    http://blog.csdn.net/ljfbest/article/details/40685327 ListView自身带了单选.多选模式,可通过listview.setChoiceMode来 ...

  9. 页面嵌套 Iframe 产生缓存导致页面数据不刷新问题

    最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息. 初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳.这样能 ...

  10. oracle数据库TNS

    TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,下面看一如何配置它吧: TNS简要介绍与应用 :O ...