如何正确地将所有枚举值插入哈希集中?
How to correctly insert all the enum values into an hashset?
我在 Java 中遇到以下问题。
我有这个 eunm,它包含 2 个值,代表 2 个字符串值 "COORDINATION" 和 "PISC":
private enum exclusion {COORDINATION, PISC};
所以我创建了这个 getEnums() 方法,其中 return 一个 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;
}
问题是,当调用此方法时,returned 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" 或 "PISC" 未进入包含我原始 exclusion 枚举,检查通过:
!esclusionHashSet.contains(dlFolder.getName())
问题是它return总是FALSE(似乎esclusionHashSet*不包含**"COORDINATION"和"PISC" 值)
我该如何解决这个问题?我错过了什么?
而不是:
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());
}
您当前添加的是包含枚举所有值的数组的字符串表示形式,而不是每个值的字符串表示形式。
我在 Java 中遇到以下问题。
我有这个 eunm,它包含 2 个值,代表 2 个字符串值 "COORDINATION" 和 "PISC":
private enum exclusion {COORDINATION, PISC};
所以我创建了这个 getEnums() 方法,其中 return 一个 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;
}
问题是,当调用此方法时,returned 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" 或 "PISC" 未进入包含我原始 exclusion 枚举,检查通过:
!esclusionHashSet.contains(dlFolder.getName())
问题是它return总是FALSE(似乎esclusionHashSet*不包含**"COORDINATION"和"PISC" 值)
我该如何解决这个问题?我错过了什么?
而不是:
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());
}
您当前添加的是包含枚举所有值的数组的字符串表示形式,而不是每个值的字符串表示形式。