如何正确地将所有枚举值插入到哈希集中?

时间:2015-01-16 09:13:49

标签: java collections enums enumeration

我在Java中遇到以下问题。

我有这个包含2个值的eunm,表示2个字符串值“COORDINATION”“PISC”

private enum exclusion {COORDINATION, PISC};

所以我创建了这个 getEnums()方法,该方法将包含枚举值的 HashSet 作为字符串返回:

private static HashSet<String> getEnums() {

    HashSet<String> values = new HashSet<String>();

    for (Exclusion e : Exclusion.values()) {
        //values.add(Exclusion.values());
        values.add(Exclusion.values().toString());
        System.out.println("Inserted values: " + e.values().toString());
    }

    return values;
}

问题是,当调用此方法时,返回的对象包含2个字符串,但是使用deubugget时,放入此 HashSet 的值不是“COORDINATION”“PISC”但是这样的话:

Inserted values: [Legp.prc.km.actions.configurationProject.ConfigurationProjectAction$Exclusion;@34653605
Valore inserito: [Legp.prc.km.actions.configurationProject.ConfigurationProjectAction$Exclusion;@39510a30

我认为问题与我如何将值插入值HashSet

有关

然后,在我的代码的其他地方,我有以下周期:

HashSet esclusionHashSet = getEnums();
for (DLFolder dlFolder : listFolder) {
    if (dlFolder.getPath().split("/").length <= 4 && dlFolder.getPath().contains(KmConstants.TAXONOMY_PARENT_FOLDER) && !esclusionHashSet.contains(dlFolder.getName())) {
        treePath.put(dlFolder.getPath(), dlFolder);
        path.add(dlFolder.getPath());            
    }
}

正如你在这里看到的所有元素到我的列表中的对象一样,我检查 dlFolder 对象的名称(可能是“COORDINATION”或< strong>“PISC”不包含 esclusionHashSet ,其中包含原始排除枚举中的值,检查由以下方式完成:

!esclusionHashSet.contains(dlFolder.getName()) 

问题是它返回alwaysl FALSE(似乎 esclusionHashSet *不包含**“COORDINATION”“PISC”值)

如何解决此问题?我错过了什么?

1 个答案:

答案 0 :(得分:2)

而不是:

for (Exclusion e : Exclusion.values()) {
    //values.add(Exclusion.values());
    values.add(Exclusion.values().toString());
    System.out.println("Inserted values: " + e.values().toString());
}

你应该这样做:

for (Exclusion e : Exclusion.values()) {
    values.add(e.name());
    System.out.println("Inserted value: " + e.name());
}

您当前添加的是包含枚举的所有值的数组的String表示形式,而不是每个值的String表示形式。