UtilMap.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package com.malk.utils;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.malk.server.common.McException;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.commons.collections4.map.HashedMap;
  6. import org.apache.commons.lang3.StringUtils;
  7. import java.util.*;
  8. @Slf4j
  9. public abstract class UtilMap {
  10. /************* 快速创建map ************/
  11. /**
  12. * 快速创建map [key, Objects]
  13. */
  14. public static Map<String, Object> map(String keys, Object... values) {
  15. String[] props = keys.split(", ");
  16. if (props.length != values.length) {
  17. McException.assertParamException_Null(keys);
  18. }
  19. Map<String, Object> map = new HashMap<>();
  20. Arrays.stream(values).forEach(UtilMc.consumerWithIndex((item, index) -> {
  21. map.put(props[index], item);
  22. }));
  23. return map;
  24. }
  25. /**
  26. * 快速创建map [key, Objects] todo, 添加枚举, 忽略空, 忽略0, 忽略""/null字符串 ...
  27. */
  28. public static Map<String, Object> mapNotNull(String keys, Object... values) {
  29. String[] props = keys.split(", ");
  30. if (props.length != values.length) {
  31. McException.assertParamException_Null(keys);
  32. }
  33. Map<String, Object> map = new HashMap<>();
  34. Arrays.stream(values).forEach(UtilMc.consumerWithIndex((item, index) -> {
  35. if (ObjectUtil.isNotNull(item) && UtilString.isNotBlankCompatNull(String.valueOf(item))) {
  36. map.put(props[index], item);
  37. }
  38. }));
  39. return map;
  40. }
  41. /**
  42. * 快速创建map [key, Strings]
  43. */
  44. public static Map<String, String> map(String keys, String values) {
  45. if (UtilString.isBlankCompatNull(keys) || UtilString.isBlankCompatNull(values)) {
  46. return UtilMap.empty();
  47. }
  48. String[] props = keys.split(", ");
  49. String[] contents = values.split(", ");
  50. if (props.length != contents.length) {
  51. McException.assertParamException_Null(keys);
  52. }
  53. Map<String, String> map = new HashMap<>();
  54. Arrays.stream(contents).forEach(UtilMc.consumerWithIndex((item, index) -> {
  55. map.put(props[index], String.valueOf(item));
  56. }));
  57. return map;
  58. }
  59. // todo 字段Equal, 添加首个参数判空
  60. /**
  61. * 快速创建map [保留skeys, 取值ckeys] todo: 新版本更新, 字段覆盖
  62. */
  63. public static Map<String, Object> map(String skeys, String ckeys, Map map) {
  64. String[] sprops = skeys.split(", ");
  65. String[] cprops = ckeys.split(", ");
  66. if (sprops.length != cprops.length) {
  67. McException.assertParamException_Null(skeys);
  68. }
  69. Map data = new HashMap();
  70. Arrays.stream(cprops).forEach(UtilMc.consumerWithIndex((item, index) -> {
  71. data.put(sprops[index], map.get(item));
  72. }));
  73. return data;
  74. }
  75. /**
  76. * 快速创建map [合并skeys, 取值ckeys]
  77. */
  78. public static void map(String skeys, String ckeys, Map sMap, Map cMap) {
  79. sMap.putAll(map(skeys, ckeys, cMap));
  80. }
  81. /// 创建空对象
  82. public static Map empty() {
  83. return new HashedMap();
  84. }
  85. /// 判定 & 创建空对象
  86. public static Map empty(Map data) {
  87. if (ObjectUtil.isNotNull(data)) {
  88. return data;
  89. }
  90. return new HashedMap();
  91. }
  92. /************* 赋值 ************/
  93. /**
  94. * 赋值 [为空对象null, 忽略]
  95. */
  96. public static Map putNotNull(Map data, String key, Object value) {
  97. if (ObjectUtil.isNull(data)) {
  98. data = new HashMap();
  99. }
  100. if (ObjectUtil.isNotNull(value)) {
  101. data.put(key, value);
  102. }
  103. return data;
  104. }
  105. /**
  106. * 赋值 [为空字符串, 忽略]
  107. */
  108. public static Map putNotEmpty(Map data, String key, String value) {
  109. if (ObjectUtil.isNull(data)) {
  110. data = new HashMap();
  111. }
  112. if (StringUtils.isNotBlank(value)) {
  113. data.put(key, value);
  114. }
  115. return data;
  116. }
  117. /**
  118. * 非空对象全量合并
  119. */
  120. public static Map putAll(Map data, Map value) {
  121. if (ObjectUtil.isNull(data)) {
  122. if (ObjectUtil.isNull(value)) {
  123. return empty();
  124. }
  125. return value;
  126. }
  127. if (ObjectUtil.isNotNull(value)) {
  128. data.putAll(value);
  129. }
  130. return data;
  131. }
  132. /**
  133. * 赋值 [值为0, 忽略]
  134. */
  135. public static Map putNotZero(Map data, String key, Object value) {
  136. float val = 0.f;
  137. try {
  138. val = Float.valueOf(String.valueOf(value));
  139. } catch (Exception e) {
  140. data.put(key, value);
  141. }
  142. if (val != 0.f) {
  143. data.put(key, value);
  144. }
  145. return data;
  146. }
  147. /**
  148. * 赋值 [原值为空赋值默认值]
  149. */
  150. public static Map put(Map data, String key, Object defaultValue) {
  151. if (ObjectUtil.isNull(data)) {
  152. data = empty(data);
  153. }
  154. Object value = data.get(key);
  155. if (ObjectUtil.isNull(value)) {
  156. value = defaultValue;
  157. }
  158. data.put(key, value);
  159. return data;
  160. }
  161. /**
  162. * 赋值 [赋值为空赋值默认值]
  163. */
  164. public static Map put(Map data, String key, Object value, Object defaultValue) {
  165. data = empty(data);
  166. if (ObjectUtil.isNull(value)) {
  167. value = defaultValue;
  168. }
  169. data.put(key, value);
  170. return data;
  171. }
  172. /************* 取值 ************/
  173. /**
  174. * 取值 [String.valueOf 避免空指针]
  175. */
  176. public static String getString(Map data, String key) {
  177. if (data.containsKey(key)) {
  178. // 不能判空字符串
  179. if (ObjectUtil.isNull(data.get(key))) {
  180. return "";
  181. }
  182. String value = String.valueOf(data.get(key));
  183. // 屏蔽空指针转换
  184. if (value.equals("null")) {
  185. return "";
  186. }
  187. return value;
  188. }
  189. return "";
  190. }
  191. /**
  192. * 取值 [转为 long]
  193. */
  194. public static long getLong(Map data, String key) {
  195. McException.assertParamException_Null(data, key);
  196. return Long.valueOf(getString(data, key)) + 0L;
  197. }
  198. /**
  199. * 取值 [转为 int]
  200. */
  201. public static int getInt(Map data, String key) {
  202. String txt = getString(data, key);
  203. if (StringUtils.isBlank(txt)) {
  204. return 0;
  205. }
  206. return Integer.valueOf(txt);
  207. }
  208. /**
  209. * 取值 [转为 float]
  210. */
  211. public static Float getFloat(Map data, String key) {
  212. String txt = getString(data, key);
  213. if (StringUtils.isBlank(txt)) {
  214. return 0f;
  215. }
  216. return Float.valueOf(txt);
  217. }
  218. public static Double getDouble(Map data, String key) {
  219. String txt = getString(data, key);
  220. if (StringUtils.isBlank(txt)) {
  221. return 0d;
  222. }
  223. return Double.valueOf(txt);
  224. }
  225. /**
  226. * 取值 [转为 bool]
  227. */
  228. public static Boolean getBoolean(Map data, String key) {
  229. return Boolean.valueOf(getString(data, key));
  230. }
  231. /**
  232. * 取值 [为空返回默认值]
  233. */
  234. public static Object get_default(Map data, String key, Object defaultValue) {
  235. Object value = data.get(key);
  236. if (ObjectUtil.isNull(value)) {
  237. return defaultValue;
  238. }
  239. return value;
  240. }
  241. /**
  242. * 取值 [为空返回默认字符串]
  243. */
  244. public static String getString_default(Map data, String key, String defaultValue) {
  245. String value = getString(data, key);
  246. if (StringUtils.isBlank(value)) {
  247. return defaultValue;
  248. }
  249. return value;
  250. }
  251. /**
  252. * 取值 [未定key, 取第一个命中]
  253. */
  254. public static Object get_first(Map data, String... keys) {
  255. Object value = null;
  256. for (String key : keys) {
  257. if (data.containsKey(key)) {
  258. value = data.get(key);
  259. break;
  260. }
  261. }
  262. return value;
  263. }
  264. /**
  265. * 取值 String [未定key, 取第一个命中]
  266. */
  267. public static String getString_first(Map data, String... keys) {
  268. String value = "";
  269. for (String key : keys) {
  270. // 字段 + 值判定
  271. if (data.containsKey(key) && StringUtils.isNotBlank(getString(data, key))) {
  272. value = UtilString.stringFormatNull(data, key);
  273. break;
  274. }
  275. }
  276. return value;
  277. }
  278. /**
  279. * 取值 List
  280. */
  281. public static List getList(Map data, String key) {
  282. if (data.containsKey(key)) {
  283. Object val = data.get(key);
  284. if (val instanceof List) {
  285. return (List) val;
  286. }
  287. }
  288. return new ArrayList();
  289. }
  290. /**
  291. * 取值 Map
  292. */
  293. public static Map getMap(Map data, String key) {
  294. if (data.containsKey(key)) {
  295. Object val = data.get(key);
  296. if (val instanceof Map) {
  297. return (Map) val;
  298. }
  299. return (Map) data.get(key);
  300. }
  301. return new HashedMap();
  302. }
  303. /************* 判定 ************/
  304. /**
  305. * 是否空字符串
  306. */
  307. public static boolean isBlankString(Map data, String key) {
  308. return StringUtils.isBlank(getString(data, key));
  309. }
  310. /**
  311. * 是否不为空字符串
  312. */
  313. public static boolean isNotBlankString(Map data, String key) {
  314. return StringUtils.isNotBlank(getString(data, key));
  315. }
  316. }