【问题标题】:Java map in a map, REST web Service地图中的 Java 地图,REST Web 服务
【发布时间】:2015-10-02 07:07:40
【问题描述】:

// 大家好,

所以我正在制作一个收件箱元素,并且..我需要从服务中获取字段“startDate”,但我遇到了一个问题,因为该服务中的所有数据都是“深度”映射的..

我想出来的是:

GenericType<Map<String, Object>> responseType2 = new GenericType<Map<String, Object>>() {};   
Map<String, Object> data2 = info.readEntity(responseType2);

Map<String, Object> data3 = (Map<String, Object>) data2.get("data");

Map<String, Object> data4 = (Map<String, Object>) data3.get("workflowInstance");

只有在这一切之后,我才能得到我需要的东西..

好的,它可以工作,但是代码看起来很多余?!

而且,我希望找到一种在地图中制作类似地图的方法,或者任何其他方式,以提高代码效率?

提前致谢。

【问题讨论】:

    标签: java json rest dictionary


    【解决方案1】:

    很难从你简短的 sn-p 代码中准确地看出你想要做什么,但假设你所追求的只是一个简单的实用程序,你可以编写这样的方法:

    public static <T> Map<String, T> get(Map<String, ?> data, String... path)
    {
      if (path.length == 0)
      {
        return null;
      }
    
      Map<String, ?> child = data;   
    
      for (int i = 0; i < path.length; i++)
      {
        String childKey = path[i];
        child = child.get(childKey);
    
        if (child == null)
        {
          return null;
        }                
      }  
    
      return child;    
    }
    

    可以这样称呼:

    Map<String, Object> data = get(info.readEntity(responseType2), "data", "workflowInstance");
    

    此代码在速度方面不会比问题中显示的单个 Map.gets 更有效,但它肯定更具可读性,恕我直言。

    【讨论】:

    • 是的,也许我无法解释足够好,但对我来说效果很好的是:GenericType&lt;Map&lt;String, List&lt;WorkflowTask&gt;&gt;&gt; responseType = new GenericType&lt;Map&lt;String, List&lt;WorkflowTask&gt;&gt;&gt;(){}; Map&lt;String, List&lt;WorkflowTask&gt;&gt; data = response.readEntity(responseType); response.close();
    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多