hasNext在HashMap中跳过第一个值

时间:2013-09-26 16:56:33

标签: java json map

我正在尝试使用来自远程服务器的数据实现可扩展的列表视图。我已经涵盖了JSON部分。我的示例返回了三个值集(通过检查原始JSON响应的logcat来确认)。我现在的问题是在将JSON返回分为标题和子数据时,跳过第一个值集。我的代码如下:

int lisDataHeaderCounter = 0;
String searchKey;

for (int i = 0; i < components.length(); i++) {                     
    List<String> component_value = new ArrayList<String>();

    searchKey = main_components.get(i);
    if (!listDataHeader.contains(searchKey)) {
        listDataHeader.add(searchKey);

        Iterator<Map.Entry<String, String>> entries = sub_components.entrySet().iterator(); 

        while (entries.hasNext()) {
            Map.Entry<String, String> entry = entries.next();

            Log.d("getValue() ", "+ " + entry.getValue());
            if (searchKey == entry.getKey())
                component_value.add(entry.getValue());
        }

        listDataChild.put(listDataHeader.get(lisDataHeaderCounter), component_value);
        lisDataHeaderCounter++;
    }                       
}

我也尝试过以下代码,结果仍然相同。

for (Map.Entry<String, String> entry : sub_components.entrySet()) {
    if (searchKey == entry.getKey())
        component_value.add(entry.getValue());
}

以下是上述代码正在处理的JSON响应示例:

[{"activity_code":"1","activity_name":"Midterm Exam"},
 {"activity_code":"1","activity_name":"Final Exam"},
 {"activity_code":"2","activity_name":"Project"}]

使用当前代码,在for循环中,searchKey的第一个值为“1”。当我放置一个Log.d();在while循环中检查第一个值是什么,我发现它是“期末考试”而不是“期中考试”。有没有办法让我在进入while循环之前获取第一个数据集的值?

这是我为确保将第一个值包含在sub_components中而采取的解决方法。但我想它看起来并不整洁。如果有人有更好的解决方案,请随时分享。

for (int i = 0; i < components.length(); i++) {
    JSONObject c = components.getJSONObject(i);

    String formula_code = c.getString(TAG_FORMULA_CODE);
    String component_name = c.getString(TAG_ACTIVITY_NAME);

    main_components.add(formula_code);
    sub_components.put(formula_code, component_name);

    if (!listDataHeader.contains(formula_code))
        listDataHeader.add(formula_code);
    if (i == 0) {
        component_value.add(component_name);
    }
}

for (int i = 0; i < listDataHeader.size(); i++) {
    for (Map.Entry<String, String> entry : sub_components.entrySet()) {
        if (listDataHeader.get(i) == entry.getKey())
            component_value.add(entry.getValue());
    }

    listDataChild.put(listDataHeader.get(i), component_value);
    component_value = new ArrayList<String>();
}

1 个答案:

答案 0 :(得分:0)

我在两者上看不到任何一个错误,但可能是searchKey == entry.getKey(),可能必须是searchKey.equals(entry.getKey()),但我需要看到更多代码才能确定