Java hasNext跳过HashMap中的第一个值

Java hasNext跳过HashMap中的第一个值,java,json,map,Java,Json,Map,我正在尝试使用远程服务器的数据实现一个可扩展的listview。我已经介绍了JSON部分。我的示例返回了三个值集,通过检查原始JSON响应上的logcat进行确认。我现在的问题是,当将JSON返回划分为头数据和子数据时,第一个值集被跳过。我的代码如下: int lisDataHeaderCounter = 0; String searchKey; for (int i = 0; i < components.length(); i++) {

我正在尝试使用远程服务器的数据实现一个可扩展的listview。我已经介绍了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循环中,searchKey的第一个值是“1”。当我放置一个日志时;在while循环中检查读取的第一个值,我发现这是期末考试,而不是期中考试。在第一个数据集进入while循环之前,有没有办法获取它的值

这里是我为确保第一个值包含在sub_组件中而做的一个变通方法。但我想它看起来不整洁。如果有人有更好的解决方案,请随时分享

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

我无法通过这两个问题上的一个错误看出任何错误,但可能是searchKey==entry.getKey,这可能必须是searchKey.equalsentry.getKey,但我需要查看更多代码才能确定。

您是否尝试过使用do-while循环?这将总是在开始迭代之前计算第一个值。跳过是指if的then部分没有被执行吗?因为您将字符串与==searchKey进行比较是一个字符串,所以即使字符串具有相同的内容,测试也可能失败。请参阅。*sirFunkenstine,我不知道如何使用do while循环实现Hashmap的迭代。你能给我一个样品吗*Joshua Taylor,如果将其与2D数组进行比较,for循环将开始读取[0][0]到[n][0]的数据。while循环应首先读取[0][1],然后转到[1][1]。仍然无法理解跳过[0][1]的原因。当您可以只使用component_value.addsub_components.getsearchKey时,为什么需要迭代HashMap?什么是sub_组件?JSON中的第一个条目?从结构上看,不可能是整个JSON从一个字符串映射到另一个字符串。我猜您的错误可能在于,第一行和第二行JSON具有相同的activity_代码。从JSON响应中,我试图分离可扩展listview所需的数据,activity_代码是标题,activity名称是子项。希望它会导致标题1必须是儿童期中考试和期末考试,而标题2只有儿童项目。我尝试了searchKey.equalsentry.getKey,但结果相同。我提供的代码是处理头和子对象的JSON响应与数据分离的代码。因此,一旦接收到JSON响应,接下来将处理这些响应。其余的代码都是从我使用的教程中得到的标准代码。
[{"activity_code":"1","activity_name":"Midterm Exam"},
 {"activity_code":"1","activity_name":"Final Exam"},
 {"activity_code":"2","activity_name":"Project"}]
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>();
}