• 使用path 格式获取java hashmap key 值


    一个简单场景,需要通过字符串格式获取hashmap 的数据
    参考请求格式

     
    getvalue(hashmap,"<key>.<subkey>.<subkey>")

    好处,我们不需要进行太多复杂的处理,就可以方便的获取支持嵌套hashmap的数据

    参考工具类

    package com.dalong;
    import java.util.List;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class MapPathUtils {
        // 处理包含数字
        private final static Pattern PATTERN_INDEX = Pattern
                .compile("^\\[(\d+)\]$");
        /**
         * Extracts a value from a target object using DPath expression.
         *
         * @param target
         * @param dPath
         */
        public static Object getValue(Object target, String dPath) {
            String[] paths = dPath.split("\.");
            // 此处实现了一个可以支持递归模式的数据处理
            Object result = target;
            for (String path : paths) {
                result = extractValue(result, path);
            }
            return result;
        }
        private static Object extractValue(Object target, String index) {
            if (target == null) {
                throw new IllegalArgumentException();
            }
            Matcher m = PATTERN_INDEX.matcher(index);
            if (m.matches()) {
                int i = Integer.parseInt(m.group(1));
                if (target instanceof Object[]) {
                    return ((Object[]) target)[i];
                }
                if (target instanceof List<?>) {
                    return ((List<?>) target).get(i);
                }
                throw new IllegalArgumentException("Expect an array or list!");
            }
            if (target instanceof Map<?, ?>) {
                return ((Map<?, ?>) target).get(index);
            }
            throw new IllegalArgumentException();
        }
    }

    参考使用

    • 代码
    package com.dalong;
    import java.util.HashMap;
    import java.util.Map;
    public class Application {
        public static void main(String[] args) {
            Map  userinfo = new HashMap();
            Map  userinfo2 = new HashMap();
            userinfo2.put("name","rong");
            userinfo2.put("type","local");
            userinfo.put("name","dalongdemo");
            userinfo.put("age",333);
            userinfo.put("title",userinfo2);
            Object name = MapPathUtils.getValue(userinfo,"title.name");
            System.out.println(name);
        }
    }
    • 运行效果

    说明

    基于path格式获取hashmap 的数据,可以简化我们的代码,比较适合我们需要灵活配置的系统,以上代码可以扩展,类似的对象
    查询规范有jsonpath,xmlpath 。。。

  • 相关阅读:
    探索c#之Async、Await剖析
    探索C#之布隆过滤器(Bloom filter)
    探索C#之虚拟桶分片
    刷新本地的DNS缓存数据
    php取整函数ceil,floor,round,intval函数的区别
    这样顶级人生规划 ,想不成功都难
    全篇干货,10分钟带你读透《参与感》
    iOS审核秘籍】提审资源检查大法
    php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
    RDS MySQL 连接数满情况的处理
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13892745.html
Copyright © 2020-2023  润新知