为什么列表中的值会被新值覆盖?

时间:2015-11-23 05:06:47

标签: android list hashmap

我有一个列表,通过循环填充要列出的值,如下所示。

List<String> labelGroupDataValue = null;

    if (labelGroupData.size() != 0) {
                            for (HashMap<String, List<String>> LabelMap : labelGroupData) {
                                for (Map.Entry<String, List<String>> labelGroupDataEntry : LabelMap.entrySet()) {
                                    if (labelGroupDataEntry.getKey() != null) {
                                        String keyvalue = labelGroupDataEntry.getKey();
                                        if (keyvalue.contains(key)) {
                                            labelGroupDataValue = labelGroupDataEntry.getValue();
                                            CheckIsCustomizings(labelGroupDataValue);
                                        }
                                    }
                                }
                            }
                        }

我面临的问题是labelGroupDataValue包含最后一个循环的数据。

在我做错的地方,你能否在这方面帮助我。

IsCustomizings代码:

private void CheckIsCustomizings(List&gt; value){         //循环遍历列表以检查是否存在Customizings syncGroup         for(int j = 0; j&lt; value.size(); j ++){

        if (value.get(j).equals("SALESDOCS")) {
            value.set(j, "SALES_DOCUMENTS");
        }

        if (value.get(j).equalsIgnoreCase("TRADEASSETS")) {
            value.set(j, "TRADE_ASSETS");
        }

        if (value.get(j).equalsIgnoreCase("PROMOTIONSCAMPAIGNS")) {
            value.set(j, "PROMOTIONS_CAMPAIGNS");
        }

        String checkName = "CUSTOMIZINGS";
        if (value.get(j).toLowerCase().contains(checkName.toLowerCase())) {
            IsCustomizingPresent = true;
            break;
        }
    }
    // If Customizings syncGroup is not present, add the same to List for displaying to the user
    if (!IsCustomizingPresent) {
        value.add("CUSTOMIZING");
    }
}

2 个答案:

答案 0 :(得分:1)

以下是如何正确添加到现有列表:

List<String> labelGroupDataValue = new ArrayList<>();

if (labelGroupData.size() != 0) {

   ... //omissis

   labelGroupDataValue.addAll(labelGroupDataEntry.getValue());
   CheckIsCustomizings(labelGroupDataValue);

   ...
}

其余代码的正确性取决于您。

答案 1 :(得分:0)

你需要在forloop中初始化“labelGroupDataValue”, 现在发生的事情是,只有一个内存被分配给列表,每次在循环中被覆盖,因此只剩下最后一个值。

如果有帮助,请尝试以下代码

List<String> labelGroupDataValue = null;

if (labelGroupData.size() != 0) {
                        for (HashMap<String, List<String>> LabelMap : labelGroupData) {
                            for (Map.Entry<String, List<String>> labelGroupDataEntry : LabelMap.entrySet()) {
                                if (labelGroupDataEntry.getKey() != null) {
                                    String keyvalue = labelGroupDataEntry.getKey();
                                    labelGroupDataValue = new ArrayList<>();
                                    if (keyvalue.contains(key)) {
                                        labelGroupDataValue = labelGroupDataEntry.getValue();
                                        CheckIsCustomizings(labelGroupDataValue);
                                    }
                                }
                            }
                        }
                    }