1 importjava.util.ArrayList;2 importjava.util.Arrays;3 importjava.util.Collection;4 importjava.util.LinkedHashSet;5 importjava.util.List;6 importjava.util.Set;7 importorg.apache.commons.collections4.CollectionUtils;8 importorg.apache.commons.lang.ArrayUtils;9
10 /**
11 * 集合工具类12 *13 */
14 public classCollectionUtil {15
16 private static transient final String DEFAULT_SPLIT_STR = ",";17
18 /**
19 * 数组转列表20 *21 *@paramarr22 * an array of T objects.23 *@param24 * a T object.25 *@returna {@linkjava.util.List} object.26 */
27 public static final Listarray2List(T[] arr) {28 if(ArrayUtils.isEmpty(arr)) {29 return null;30 }31 returnArrays.asList(arr);32 }33
34 /**
35 * 数组转SET36 *37 *@paramarr38 * an array of T objects.39 *@param40 * a T object.41 *@returna {@linkjava.util.Set} object.42 */
43 public static final Setarray2Set(T[] arr) {44 if(ArrayUtils.isEmpty(arr)) {45 return null;46 }47 return new LinkedHashSet(Arrays.asList(arr));48 }49
50 /**
51 * 合并集合52 *53 *@paramcollections54 * a {@linkjava.util.Collection} object.55 *@param56 * a T object.57 *@returna {@linkjava.util.List} object.58 */
59 @SuppressWarnings("unchecked")60 public static final Listcollections2List(61 Collection... collections) {62 if(ArrayUtils.isEmpty(collections)) {63 return null;64 }65
66 final List li = new ArrayList();67 for (Collectionfoo : collections) {68 if(CollectionUtils.isNotEmpty(foo)) {69 li.addAll(foo);70 }71 }72 returnli;73 }74
75 /**
76 * 合并集合77 *78 *@paramcollections79 * a {@linkjava.util.Collection} object.80 *@param81 * a T object.82 *@returna {@linkjava.util.Set} object.83 */
84 @SuppressWarnings("unchecked")85 public static final Set collections2Set(Collection... collections) {86 if(ArrayUtils.isEmpty(collections)) {87 return null;88 }89 final Set set = new LinkedHashSet();90 for (Collectionfoo : collections) {91 if(CollectionUtils.isNotEmpty(foo)) {92 set.addAll(foo);93 }94 }95 returnset;96 }97
98 /**
99 * 拼接集合字符串100 *101 *@paramcollection102 * a {@linkjava.util.Collection} object.103 *@paramjoinStr104 * a {@linkjava.lang.String} object.105 *@returna {@linkjava.lang.String} object.106 */
107 @SuppressWarnings({ "unchecked", "rawtypes"})108 public static final String join(final Collection collection, finalString 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 returnArrayUtil.join(arr, joinStr);118 }119
120 /**
121 * 拼接集合字符串122 *123 *@paramcollection124 * a {@linkjava.util.Collection} object.125 *@returna {@linkjava.lang.String} object.126 */
127 @SuppressWarnings("rawtypes")128 public static final String join(finalCollection collection) {129 returnjoin(collection, DEFAULT_SPLIT_STR);130 }131
132 /**
133 * 计算笛卡儿积134 *135 *@paramcrossArgs136 * a {@linkjava.util.List} object.137 *@param138 * a T object.139 *@returna {@linkjava.util.List} object.140 */
141 public static List> decartes(List>crossArgs) {142
143 //计算出笛卡尔积行数
144 int rows = crossArgs.size() > 0 ? 1 : 0;145
146 for (Listdata : crossArgs) {147 rows *=data.size();148 }149
150 //笛卡尔积索引记录
151 int[] record = new int[crossArgs.size()];152
153 List> results = new ArrayList>();154
155 //产生笛卡尔积
156 for (int i = 0; i < rows; i++) {157 List row = new ArrayList();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 returnresults;169 }170
171 /**
172 *@paramsourceArgs173 *@paramrecord174 *@paramlevel175 */
176 private static void crossRecord(List> sourceArgs, int[] record, intlevel) {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 *@param189 *@paramdatas190 *@parampage191 *@paramPAGESIZE192 *@return
193 */
194 public static List getLimit(List datas, int begin, intend) {195 List objects = new ArrayList();196 if (datas.size() <=begin) {197 returnobjects;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 returnobjects;204 }205
206 }