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);
        }
    }
}


相关文章
9hutool实战:LocalDateTimeUtil(JDK8+中的LocalDateTime 工具类封装)
9hutool实战:LocalDateTimeUtil(JDK8+中的LocalDateTime 工具类封装)
735 0
9hutool实战:LocalDateTimeUtil(JDK8+中的LocalDateTime 工具类封装)
|
4月前
|
Android开发
SharePreference封装成工具类
SharePreference封装成工具类
140 1
|
7月前
|
JSON 网络协议 C#
C# 工具类
C# 工具类
50 1
|
数据采集 算法 安全
一天一个 JUC 工具类 -- 真工具类
CountDownLatch CyclicBarrier ForkJoin Semaphore 使用方法和注意事项
|
7月前
JsonUtil工具类
JsonUtil工具类
38 0
工具类-HttpClientUtil
工具类-HttpClientUtil
56 0
|
搜索推荐 安全 小程序
6个十分好用的工具类网站
6个十分好用的工具类网站
194 0
6个十分好用的工具类网站
|
安全
CollectionUtils工具类的常用方法
集合判断:   例1: 判断集合是否为空:  CollectionUtils.isEmpty(null): true  CollectionUtils.isEmpty(new ArrayList()): true    CollectionUtils.
2067 0
RedisUtils 工具类
RedisUtils 工具类
146 0