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.mzph.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版本…