JavaMap工具类(MapUtils)

简介: 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 {
 
    @Override
    public 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> {
    @Override
    public 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);
        }
    }
}


相关文章
|
缓存 前端开发 测试技术
(译)Python 官方团队在打包项目中踩过的坑
(译)Python 官方团队在打包项目中踩过的坑
256 2
|
缓存 JavaScript 前端开发
JavaScript中DOM操作:新手常犯错误与避免策略
【4月更文挑战第1天】本文介绍了JavaScript中DOM操作的基础和新手常犯错误,包括频繁查询DOM、不恰当的遍历、滥用innerHTML、忽视异步与DOM状态以及过度同步更新。建议包括缓存DOM引用、注意文本节点、慎用innerHTML以防止XSS、正确处理异步和批量更新。遵循最佳实践,开发者能提升代码质量和应用性能。
582 2
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
JSON 监控 安全
JSONP 被劫持后会对用户造成哪些危害?
JSONP 被劫持后可能对用户造成严重的危害,涉及信息安全、财产安全和隐私保护等多个方面。因此,在使用 JSONP 进行跨域数据交互时,必须采取有效的安全措施来防止劫持事件的发生。
303 7
|
Java Scala Kotlin
SpringBoot中@Async的实现方式探索
本文探讨了一段重写了默认`@Async`线程处理的Scala代码,并对其目的与必要性提出了疑问。原代码通过自定义`AsyncExecutorConfig`类,实现了`AsyncConfigurerSupport`接口,进而配置了一个`ThreadPoolExecutor`作为异步任务的执行器。文章随后分析了为何要替换默认实现,并对Spring框架中`@Async`注解的默认行为进行了深入研究。
199 0
|
API 开发工具 UED
Mailgun邮箱API发送邮件方法
Mailgun是强大的邮件服务提供商,提供简单API用于发送和管理邮件。要使用Mailgun API发送邮件,需在Mailgun网站注册并获取API密钥,安装SDK(支持多种语言),配置API密钥,然后编写发送邮件的代码,包括设置发件人、收件人、主题和内容。发送测试邮件以验证功能正常,并可在Mailgun控制台查看发送状态。AokSend支持大规模验证码发送,触发式和SMTP/API接口,确保高触达的邮件发送服务,优化用户体验。
|
安全 数据挖掘 定位技术
笔记 - 《业务架构解构与实践》
《业务架构解构与实践》的笔记
|
数据可视化 Python
Python办公自动化【合并单元格-openpyxl、增加图表-openpyxl、合并工作薄-openpyxl、合并多个文件工作薄-openpyxl】(三)-全面详解(学习总结---从入门到深化)
Python办公自动化【合并单元格-openpyxl、增加图表-openpyxl、合并工作薄-openpyxl、合并多个文件工作薄-openpyxl】(三)-全面详解(学习总结---从入门到深化)
391 0
|
Java 数据库 Spring
Spring学习(十):JdbcTemplate操作数据库实现查询功能
Spring学习(十):JdbcTemplate操作数据库实现查询功能
460 0
Spring学习(十):JdbcTemplate操作数据库实现查询功能
|
Python
Nuitka打包二、命令总结
Nuitka打包exe工具,基本命令
3161 0