【问题标题】:Strugging to simplify HashMap object placement努力简化 HashMap 对象放置
【发布时间】:2014-01-25 12:38:59
【问题描述】:

我正在创建一个 SimpleExpandableListAdapter,但在没有大量代码的情况下无法将对象放入相应的组中。

布局是: [周一] - childGroup1 数据 [周二] - childGroup2 数据

我有一个 JSON 数组,它返回一个用户的课程列表,这些需要按天排序,并放入相应的可扩展标题中,但是我的代码很长,我想知道是否有更简单的方法这样做我可能忽略了?

我正在获取 JSON 对象,检查它的日期并将该课程的数据存储到日期组中。

我觉得我的编码方式太长了,正在寻找改进此代码的方法,以使其更具动态性。

//child data
List<List<HashMap<String, String>>> childData = new ArrayList<List<HashMap<String, String>>>();
List<HashMap<String,String>> childGroup0 = new ArrayList<HashMap<String,String>>();
List<HashMap<String,String>> childGroup1 = new ArrayList<HashMap<String,String>>();
List<HashMap<String,String>> childGroup2 = new ArrayList<HashMap<String,String>>();
List<HashMap<String,String>> childGroup3 = new ArrayList<HashMap<String,String>>();
List<HashMap<String,String>> childGroup4 = new ArrayList<HashMap<String,String>>();
List<HashMap<String,String>> childGroup5 = new ArrayList<HashMap<String,String>>();
List<HashMap<String,String>> childGroup6 = new ArrayList<HashMap<String,String>>();
for (int i = 0; i < jArray.length(); i++) {
    JSONObject jObj = jArray.getJSONObject(i);

    HashMap<String, String> hm = new HashMap<String, String>();
    hm.put("moduleName", jObj.getString("moduleName"));
    hm.put("startTime",
            (jObj.getString("startTime")).substring(0, 5));
    hm.put("endTime",
            (jObj.getString("endTime")).substring(0, 5));
    hm.put("group", jObj.getString("group"));
    hm.put("roomName", jObj.getString("roomName"));
    hm.put("firstName", jObj.getString("firstName"));
    hm.put("lastName", jObj.getString("lastName"));

    switch (Integer.parseInt(jObj.getString("day"))){
    case 0:
        childGroup0.add(hm);
        break;
    case 1:
        childGroup1.add(hm);
        break;
    case 2:
        childGroup2.add(hm);
        break;
    case 3:
        childGroup3.add(hm);
        break;
    case 4:
        childGroup4.add(hm);
        break;
    case 5:
        childGroup5.add(hm);
        break;
    case 6:
        childGroup6.add(hm);
        break;
    }                            
}
childData.add(childGroup0);
childData.add(childGroup1);
childData.add(childGroup2);
childData.add(childGroup3);
childData.add(childGroup4);
childData.add(childGroup5);
childData.add(childGroup6);

【问题讨论】:

    标签: java android json list hashmap


    【解决方案1】:

    是的,摆脱所有childGroup 对象,只需将它们作为列表项添加到您的childData 中。如果jObj.getString("day") &gt; 6 也会导致错误,所以也许你想在其中添加一些逻辑来说明它是否> 6,然后将其添加到不同的组。

    List<List<HashMap<String, String>>> childData = new ArrayList<List<HashMap<String, String>>>();
    for(int i=0;i<6;i++)
        childData.add(new ArrayList<HashMap<String,String>>());
    for (int i = 0; i < jArray.length(); i++) { 
        JSONObject jObj = jArray.getJSONObject(i);  
    
        HashMap<String, String> hm = new HashMap<String, String>();
        hm.put("moduleName", jObj.getString("moduleName"));
        hm.put("startTime",
                (jObj.getString("startTime")).substring(0, 5));
        hm.put("endTime",
                (jObj.getString("endTime")).substring(0, 5));
        hm.put("group", jObj.getString("group"));
        hm.put("roomName", jObj.getString("roomName"));
        hm.put("firstName", jObj.getString("firstName"));
        hm.put("lastName", jObj.getString("lastName"));
    
        childData.get(Integer.parseInt(jObj.getString("day"))).add(hm);
    }
    

    【讨论】:

    • +1。此外,为了简洁plus“正确”使用多态性,您可能应该将HashMap 泛型参数更改为Map:childData = new ArrayList&lt;List&lt;Map&lt;String, String&gt;&gt;&gt;()(以及在其他有@ 987654328@).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    相关资源
    最近更新 更多