JavaMap工具類(MapUtils)

1、Object轉Map

2、將 map 中的 value 為null的的元素轉成空字符串""

3、map轉Object

4、MAP 判空

5、Map 排序 按key值長度進行排序

6、兩個MAP對比,在oldMap中移除remMap中所有的key值

備注:排序的話(TreeMap)是可以直接實現簡單排序的,如果有復雜的業務場景可以重寫Comparator

引入jar

<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dependency>
import org.apache.commons.beanutils.BeanMap;
import org.apache.commons.beanutils.BeanUtils;import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.*;import static org.apache.commons.beanutils.BeanUtils.populate;/*** MAP工具類* TreeMap是有序的 默認正序排列*/
public class MapUtils {/*** Object轉Map** @param obj* @return*/public static Map<?, ?> objectToMap(Object obj) {if (obj == null) {return null;}return new BeanMap(obj);}/*** Object轉Map** @param obj* @return* @throws IllegalAccessException*/public static Map<?, ?> objectToMapA(Object obj) throws IllegalAccessException {if (obj == null) {return null;}Map<String, Object> map = new HashMap<>();Class<?> clazz = obj.getClass();for (Field field : clazz.getDeclaredFields()) {field.setAccessible(true);String fieldName = field.getName();Object value = field.get(obj);map.put(fieldName, value);}return map;}/*** Object 轉MAP** @param obj* @return* @throws IllegalAccessException* @throws NoSuchMethodException* @throws InvocationTargetException*/public static Map<?, ?> objectToMapB(Object obj) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {if (obj == null) {return null;}//使用BeanUtils獲取對象屬性return BeanUtils.describe(obj);}/*** 將 map 中的 value 為null的的元素轉成空字符串""** @param map* @return*/public static Map<Integer, String> valueConvertString(Map<Integer, String> map) {map.forEach((k, v) -> {if (null == v || "".equals(v)) {map.put(k, "\" \"");}});return map;}/*** map轉Object** @param map* @param beanClass* @return* @throws Exception*/public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) {if (map == null) {return null;}try {Object obj = beanClass.newInstance();populate(obj, map);return obj;} catch (Exception e) {e.printStackTrace();}return null;}/*** MAP 判空** @param map* @return*/public static boolean isEmpty(Map<?, ?> map) {return map == null || map.isEmpty();}/*** Map 排序   按key值長度進行排序** @param map* @return*/public static Map<String, String> sortMapByKey(Map<String, String> map) {if (CommonFunctions.isEmpty(map)) {return null;}Map<String, String> sortMap = new TreeMap<>(new MapKeyComparator());sortMap.putAll(map);return sortMap;}/*** 兩個MAP對比,在oldMap中移除remMap中所有的key值** @param remMap 移除的key* @param oldMap 需要移除key值的MAP*/public static void removeKey(Map remMap, Map oldMap) {if (CommonFunctions.isEmpty(remMap) || CommonFunctions.isEmpty(remMap)) {return;}Iterator iterator = remMap.keySet().iterator();while (iterator.hasNext()) {String key = (String) iterator.next();oldMap.remove(key);}}public static void main(String[] args) {//只是簡單的排序 這里足夠用了Map<String, Object> map = new TreeMap<>();//正序map.put("A1", 3);map.put("D3", 1);map.put("B4", 2);map.put("C2", 4);map.forEach((k, v) -> System.out.println("正序====KEY==" + k + "====VALUE====" + v));Map<String, Object> mapDesc = new TreeMap<>(new MapKeyComparatorDesc());//倒序mapDesc.put("A1", 3);mapDesc.put("D3", 1);mapDesc.put("B4", 2);mapDesc.put("C2", 4);mapDesc.forEach((k, v) -> System.out.println("倒序====KEY==" + k + "====VALUE====" + v));Map<String, String> keyMap = new HashMap<>();keyMap.put("A", "Q");keyMap.put("AA", "Q");keyMap.put("AAAA", "Q");keyMap.put("AAA", "Q");keyMap.put("AAAAA", "Q");keyMap.forEach((k, v) -> System.out.println("排序前====KEY==" + k + "====VALUE====" + v));Map<String, String> map1 = sortMapByKey(keyMap);map1.forEach((k, v) -> System.out.println("排序后====KEY==" + k + "====VALUE====" + v));}}//比較1 (默認比較級倒轉)
class MapKeyComparatorDesc implements Comparator {@Overridepublic int compare(Object o1, Object o2) {String i1 = (String) o1;String i2 = (String) o2;return -i1.compareTo(i2);}
}//比較2   (key值長度比較)
class MapKeyComparator implements Comparator<String> {@Overridepublic int compare(String o1, String o2) {if (o1.length() > o2.length()) {return -1;} else if (o1.length() < o2.length()) {return 1;} else {return o2.compareTo(o1);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213775.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VR轉接線方案/VR Link串流數據線方案/VR眼鏡PD快充方案

虛擬現實技術(英文名稱&#xff1a;Virtual Reality&#xff0c;縮寫為VR)&#xff0c;又稱虛擬實境或靈境技術&#xff0c;是20世紀發展起來的一項全新的實用技術。虛擬現實技術囊括計算機、電子信息、仿真技術&#xff0c;其基本實現方式是以計算機技術為主&#xff0c;利用并…

Java:commons-lang3中的StringUtils.strip實現移除字符串首尾字符

依賴 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> </dependency>示例 // 包名 import org.apache.commons.lang3.StringUtils;// 處理字符串&…

kafka支持外網訪問

kafka支持外網訪問 1.kafka正常部署之后如果不修改&#xff0c;外網是無法訪問的&#xff0c;具體如下&#xff08;這里是單節點&#xff09; 2.這個時候需要修改kafka的config中的server.properties中的 listeners 修改為0.0.0.0 監控所有網卡&#xff0c;advertised.listene…

管理空閑存儲空間

位示圖是操作系統中一種管理空閑存儲空間的方法。管理空閑除使用位示圖法還可用&#xff1a;空閑區表法&#xff0c;空閑鏈表法&#xff0c;成組鏈接法 1.空閑區表法 空閑表法屬于連續分配方法。它與內存管理中的動態分區分配方法雷同。 將外存空間上一個連續未分配區域稱為“…

[三次反轉法]循環移動數組元素

循環移動 題目描述 給定一組整數&#xff0c;要求利用數組把這組數保存起來&#xff0c;然后實現對數組的循環移動。假定供有n個整數&#xff0c;則要使前面各數順序向后移m個位置&#xff0c;并使最后m個數變為最前面的m個數(m<n)。 注意&#xff0c;不要用先輸出后m個數…

口袋參謀:如何對訂單實現一鍵批量插旗?

?在淘寶店鋪運營中&#xff0c;對寶貝訂單標注插旗&#xff0c;也算是常態了&#xff0c;至少90%的商家都不陌生&#xff0c;剩下的10%是剛入行的新手&#xff0c;正如我剛入行一樣。 01 首先我們要了解什么是插旗&#xff1f; 其實就是淘寶店鋪利用各種顏色的旗子來代表訂單…

A-23 P離子交換樹脂:高效去除無機有機污染物的新選擇

在當今水處理行業中&#xff0c;高效、環保的離子交換樹脂備受關注。本文將為您介紹一款具有卓越性能的堿性季胺基陰離子交換樹脂——Tulsion A-23 P。通過分析其特性和應用&#xff0c;展示其在水處理領域的優勢。 一、Tulsion A-23 P離子交換樹脂的特性 物理化學穩定性&#…

Vue生命周期函數執行順序(使用注意事項)

文章目錄 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed Vue.js 是一個基于 MVVM 模式的前端框架&#xff0c;它的核心是一個響應式的數據綁定系統。在 Vue.js 中&#xff0c;組件是一個可復用的 Vue 實例&#xff0c;它擁有自己的生命周期…

input聚焦,失去焦點的那些事

需求&#xff1a; 1&#xff1a;搜索輸入時顯示清空按鈕和搜索按鈕&#xff1b; 2&#xff1a;點擊搜索按鈕失去焦點&#xff0c;并查詢&#xff1b; 3&#xff1a;點擊清空按鈕后重新聚焦&#xff1b; 需要解決的問題&#xff1a; 1&#xff1a;失去焦點需要別的處理的話要加…

Linux命令——nc

Linux命令——nc 文章目錄 Linux命令——nc例子客戶端/服務端模型數據傳輸與服務端交互端口掃描使用代理發送文件聊天工具一次性 Web Server文件夾傳輸遠程克隆磁盤shell反向 shell 參考 netcat&#xff0c;簡寫為 nc&#xff0c;是 unix 系統下一個強大的命令行網絡通信工具&a…

JS手寫Promise.all方法

測試例子 var f11 Promise.resolve("111");var f22 Promise.resolve("222");var f33 Promise.resolve("333");// var f33 Promise.reject("333");1、用原生 Promise 實現 邏輯說明&#xff1a;接收一個由多個promise方法組成的數組…

uniapp開發小程序-pc端小程序下載后端接口的二進制流文件

fileName包含文件名后綴名&#xff0c;比如test.png這種格式 api.DownloadTmtFile后端接口返回的是文件的二進制流 值得注意的是&#xff0c;微信開發者工具中是測試不了wx.saveFileToDisk的&#xff0c;需要真機或者體驗版測試 handleDownload(fileName) {if (!fileName) retu…

mysql表的字段建議加上NOT NULL約束

mysql的列加上NOT NULL約束&#xff0c;這是一個好的實踐&#xff08;但不是一個強制要求&#xff09;&#xff0c;因為它能帶來一些好處&#xff0c;例如&#xff1a; 設置為NOT NULL&#xff0c;可以確保該列沒有NULL值&#xff0c;對該列的數據的規范性進行約束。加上NOT N…

大文件傳輸軟件和傳統軟件的優缺點

在當前信息時代&#xff0c;文件和數據的傳輸已成為我們工作和生活中不可或缺的一環。無論是向同事發送報告還是與朋友分享電影&#xff0c;我們都需要依賴軟件完成這些操作。然而&#xff0c;隨著文件和數據容量的增大&#xff0c;傳統的文件傳輸軟件如FTP、HTTP、SMB、NFS等已…

pycharm中py文件設置參數

在py文件中右鍵 直接對應復制進去即可

sql35(Leetcode1204最后一個能進入巴士的人)

代碼&#xff1a; from t1,t2 自連接 兩兩組合 group by having 求和 選出<1000的項 # Write your MySQL query statement below select a.person_name from Queue a, Queue b where a.turn>b.turn group by a.person_id having sum(b.weight)<1000 order by a.t…

Android:The emulator process for AVD Pixel_2_API_29 was killed

The emulator process for AVD Pixel_2_API_29 was killed 報錯描述&#xff1a; 第一次安裝Android studio好不容易解決gradle啟動模擬器又出現了以下錯誤 The emulator process for AVD Pixel_2_API_29 was killed原因一&#xff1a; 需要安裝Intel x86 Emulator Acceleer…

開啟AI時代產品管理新篇章——寫給產品經理的一本跨界書

在數字化時代&#xff0c;產品經理的角色和能力要求不斷演變。徐修建所著的《搜廣推策略產品經理——互聯網大廠搜索廣告推薦案例》恰逢其時&#xff0c;為新時代的產品經理提供了寶貴的指南。 首先&#xff0c;它通過通俗易懂的語言和生動案例&#xff0c;成功揭示了互聯網大廠…

Linux-----find命令

一、find命令 find介紹&#xff1a; ???find是可以通過文件名稱、類型、大小、權限屬性、時間戳等條件在指定目錄下查找對應文件或者目錄的工具&#xff1b;還可以配合相關命令對匹配到的文件作出后續處理。 二、工作原理及特點 find在查找文件時會遍歷指定的目錄&#xff…

基于conda環境使用mamba/conda安裝配置QIIME 2 2023.9 Amplicon擴增子分析環境,q2cli主要功能模塊介紹及使用

QIIME 2 2023.9 Amplicon Distribution介紹&#xff1a; 概述 qiime團隊專門針對高通量擴增子序列分析退出的conda集成環境&#xff0c;包括了主要和常見的擴增子分析模塊&#xff0c;用戶可以單獨使用各個模塊&#xff0c;也可以使用各模塊組成不同的分析流程。從2023.09版本…