CollectionUtil.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. package com.uas.utils;
  2. import net.sf.json.JSONArray;
  3. import net.sf.json.JSONObject;
  4. import org.springframework.util.StringUtils;
  5. import java.lang.reflect.InvocationTargetException;
  6. import java.lang.reflect.Method;
  7. import java.util.*;
  8. import java.util.function.Function;
  9. public class CollectionUtil {
  10. public static final int EXCLUDE = 0;
  11. public static final int INCLUDE = 1;
  12. /**
  13. * 取List里面的field的值
  14. */
  15. public static Object[] pluck(List<Map<Object, Object>> list, String field) {
  16. Object[] d = new Object[list.size()];
  17. int index = 0;
  18. for (Map<Object, Object> m : list) {
  19. if (m.containsKey(field)) {
  20. d[index++] = m.get(field);
  21. }
  22. }
  23. return d;
  24. }
  25. public static Object[] pluck(ArrayList<HashMap<Object, Object>> list, String field) {
  26. Object[] d = new Object[list.size()];
  27. int index = 0;
  28. for (Map<Object, Object> m : list) {
  29. if (m.containsKey(field)) {
  30. d[index++] = m.get(field);
  31. }
  32. }
  33. return d;
  34. }
  35. /**
  36. * 过滤List
  37. */
  38. public static List<Map<Object, Object>> filter(List<Map<Object, Object>> list, int type, Object... field) {
  39. int i = 1, len = field.length;
  40. if (len % 2 != 0) {
  41. try {
  42. throw new Exception("参数个数有误!");
  43. } catch (Exception e) {
  44. }
  45. }
  46. List<Map<Object, Object>> d = new ArrayList<Map<Object, Object>>();
  47. if (type == CollectionUtil.INCLUDE) {
  48. for (Map<Object, Object> m : list) {
  49. i = 0;
  50. for (Object f : field) {
  51. if (i % 2 == 0) {
  52. if (field[i + 1] != m.get(f) && !(field[i + 1]).equals(m.get(f))) {
  53. break;
  54. }
  55. }
  56. i++;
  57. if (i == len) {
  58. d.add(m);
  59. }
  60. }
  61. }
  62. } else {
  63. for (Map<Object, Object> m : list) {
  64. i = 0;
  65. for (Object f : field) {
  66. if (i % 2 == 0) {
  67. if (field[i + 1] == m.get(f) || (field[i + 1]).equals(m.get(f))) {
  68. break;
  69. }
  70. }
  71. i++;
  72. if (i == len) {
  73. d.add(m);
  74. }
  75. }
  76. }
  77. }
  78. return d;
  79. }
  80. public static Map<String, Object> findRecord(List<Map<String, Object>> list, String field, Object value) {
  81. if (value != null) {
  82. for (Map<String, Object> m : list) {
  83. if (value.equals(m.get(field))) {
  84. return m;
  85. }
  86. }
  87. }
  88. return null;
  89. }
  90. /**
  91. * 字段{field}的值是否重复
  92. *
  93. * @param list
  94. * @param field
  95. * @return
  96. */
  97. public static boolean isUnique(Collection<? extends Map<?, Object>> list, String field) {
  98. if (list != null) {
  99. Set<Object> objects = new HashSet<Object>();
  100. Object object = null;
  101. for (Map<?, Object> m : list) {
  102. object = m.get(field);
  103. if (object != null) {
  104. if (objects.contains(object))
  105. return false;
  106. objects.add(object);
  107. }
  108. }
  109. }
  110. return true;
  111. }
  112. /**
  113. * 取字段{field}的重复项
  114. *
  115. * @param list
  116. * @param field
  117. * @return
  118. */
  119. public static String getRepeats(Collection<? extends Map<?, Object>> list, String field) {
  120. if (list != null) {
  121. Set<Object> objects = new HashSet<Object>();
  122. Object object = null;
  123. StringBuffer sb = new StringBuffer();
  124. for (Map<?, Object> m : list) {
  125. object = m.get(field);
  126. if (object != null) {
  127. if (objects.contains(object))
  128. sb.append(object).append(" ");
  129. objects.add(object);
  130. }
  131. }
  132. if (sb.length() > 0)
  133. return sb.toString();
  134. }
  135. return null;
  136. }
  137. public static String toString(List<Map<Object, Object>> list) {
  138. JSONArray arr = new JSONArray();
  139. JSONObject obj = null;
  140. for (Map<Object, Object> map : list) {
  141. if (map != null) {
  142. obj = new JSONObject();
  143. for (Object key : map.keySet()) {
  144. obj.put(key, map.get(key));
  145. }
  146. arr.add(obj);
  147. }
  148. }
  149. return arr.toString();
  150. }
  151. public static String toJSONString(Map<String, ?> map) {
  152. return JSONObject.fromObject(map).toString();
  153. }
  154. public static String toString(Map<String, ?> map) {
  155. Set<String> keys = map.keySet();
  156. StringBuffer sb = new StringBuffer();
  157. for (String k : keys) {
  158. if (sb.length() > 0)
  159. sb.append(",");
  160. if (StringUtil.hasText(k))
  161. sb.append(k).append(":");
  162. Object value = map.get(k);
  163. if (value instanceof Double) {
  164. value = NumberUtil.parseBigDecimal(Double.parseDouble(String.valueOf(value)));
  165. }
  166. sb.append(value);
  167. }
  168. return sb.toString();
  169. }
  170. public static String toString(Collection<String> paramArray) {
  171. return toString(paramArray, ",");
  172. }
  173. public static String toString(Object[] strs) {
  174. StringBuffer sb = new StringBuffer();
  175. for (Object k : strs) {
  176. if (!StringUtils.isEmpty(k)) {
  177. if (sb.length() > 0)
  178. sb.append(",");
  179. sb.append(k);
  180. }
  181. }
  182. return sb.toString();
  183. }
  184. public static String toString(Collection<String> paramArray, String separator) {
  185. StringBuffer sb = new StringBuffer();
  186. for (String k : paramArray) {
  187. if (!StringUtils.isEmpty(k)) {
  188. if (sb.length() > 0)
  189. sb.append(separator);
  190. sb.append(k);
  191. }
  192. }
  193. return sb.toString();
  194. }
  195. /**
  196. * 用类<T>的变量key的get方法取变量key的值,并用separator连接成字符串
  197. *
  198. * @param paramArray
  199. * @param key
  200. * @param separator
  201. * @return
  202. */
  203. public static <T> String getParamString(Collection<T> paramArray, String key, String separator) {
  204. StringBuffer sb = new StringBuffer();
  205. if (!isEmpty(paramArray)) {
  206. String methodGet = "get" + StringUtils.capitalize(key);
  207. Method method = null;
  208. for (T param : paramArray) {
  209. try {
  210. if (method == null)
  211. method = param.getClass().getMethod(methodGet, new Class[] {});
  212. Object val = method.invoke(param, new Object[] {});
  213. if (val != null) {
  214. if (sb.length() > 0)
  215. sb.append(separator);
  216. sb.append(val);
  217. }
  218. } catch (NoSuchMethodException e) {
  219. e.printStackTrace();
  220. } catch (SecurityException e) {
  221. e.printStackTrace();
  222. } catch (IllegalAccessException e) {
  223. e.printStackTrace();
  224. } catch (IllegalArgumentException e) {
  225. e.printStackTrace();
  226. } catch (InvocationTargetException e) {
  227. e.printStackTrace();
  228. }
  229. }
  230. }
  231. return sb.toString();
  232. }
  233. public static String toSqlString(Set<String> strs) {
  234. StringBuffer sb = new StringBuffer();
  235. for (String k : strs) {
  236. if (sb.length() > 0)
  237. sb.append(",");
  238. sb.append("'").append(k).append("'");
  239. }
  240. return sb.toString();
  241. }
  242. public static String toSqlString(String[] strs) {
  243. StringBuffer sb = new StringBuffer();
  244. for (String k : strs) {
  245. if (sb.length() > 0)
  246. sb.append(",");
  247. sb.append("'").append(k).append("'");
  248. }
  249. return sb.toString();
  250. }
  251. public static String pluckSqlString(Collection<? extends Map<?, Object>> list, String field) {
  252. StringBuffer sb = new StringBuffer();
  253. for (Map<?, Object> m : list) {
  254. if (m.containsKey(field)) {
  255. if (sb.length() > 0)
  256. sb.append(",");
  257. sb.append("'").append(m.get(field).toString().replaceAll("'","''")).append("'");
  258. }
  259. }
  260. return sb.toString();
  261. }
  262. /**
  263. * 按给定size切割
  264. *
  265. * @param paramList
  266. * @param paramSize
  267. * @return
  268. */
  269. public static <T> List<List<T>> split(List<T> paramList, int paramSize) {
  270. List<List<T>> lists = new ArrayList<List<T>>();
  271. for (int j = 0, l = paramList.size(), i = l / paramSize; j <= i; j++) {
  272. lists.add(paramList.subList(j * paramSize, Math.min((j + 1) * paramSize, l)));
  273. }
  274. return lists;
  275. }
  276. /**
  277. * 按给定size切割
  278. *
  279. * @param paramArray
  280. * @param paramSize
  281. * @return
  282. */
  283. public static Object[] split(Object[] paramArray, int paramSize) {
  284. int len = paramArray.length;
  285. Object[] arrays = new Object[(int) Math.ceil((double) len / paramSize)];
  286. for (int j = 0, l = arrays.length; j < l; j++) {
  287. arrays[j] = Arrays.copyOfRange(paramArray, j * paramSize, Math.min((j + 1) * paramSize, len));
  288. }
  289. return arrays;
  290. }
  291. public static boolean isEmpty(Collection<?> paramArray) {
  292. return (paramArray == null) || (paramArray.size() == 0);
  293. }
  294. /**
  295. * 给list倒序
  296. * */
  297. public static <T> List<T> reverse(List<T> lists) {
  298. Collections.reverse(lists);
  299. return lists;
  300. }
  301. public static <K, V> Map<K, List<V>> groupBy(List<V> sources, Function<V, K> keyGetter) {
  302. Map<K, List<V>> map = new LinkedHashMap<>(1);
  303. if (!isEmpty(sources)) {
  304. sources.forEach(source -> {
  305. K key = keyGetter.apply(source);
  306. if (map.containsKey(key)) {
  307. map.get(key).add(source);
  308. } else {
  309. List<V> childList = new ArrayList<>();
  310. childList.add(source);
  311. map.put(key, childList);
  312. }
  313. });
  314. }
  315. return map;
  316. }
  317. }