当前位置: 首页 > 知识库问答 >
问题:

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

施利
2023-03-14

我在Java有以下问题。

我有一个eunm,它包含两个值,代表两个字符串值“协调”和“PISC”:

private enum exclusion {COORDINATION, PISC};

因此,我创建了这个getEnums()方法,它返回一个哈希集,其中包含作为字符串的枚举值:

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不是协调和PISC,而是这样的东西:

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

我认为问题与如何将值插入值哈希集中有关

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

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”)的名称是否不在包含原始排除枚举中的值的esclusionHashSet中,检查是通过以下方式完成的:

!esclusionHashSet.contains(dlFolder.getName()) 

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

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

共有1个答案

巴英韶
2023-03-14

而不是:

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表示形式。

 类似资料:
  • 编者按:这个问题有一个复杂的历史,但归结为: *要了解如何通过键值对枚举哈希表的条目,请参阅接受的答案。 *要了解如何通过键值的集合,请参阅其他答案。 我想我又陷入了XY问题,我最初的问题是关于过滤哈希表。我发现在创建哈希表之前更容易过滤。问题回答了,对吧? 不,Y问题是循环每个键并使用@briantist帮助我的值。 我的目标是循环使用键名(即时间戳),并使用键名作为任务名称和触发器来安排任务。

  • 我正在Java Spring/Hibernate中使用Swagger-UI。Swagger UI版本是2。 我很难使用枚举。

  • 我试图使用Datastax驱动程序将作为<code>int、time、hash</code>提供的值存储到Cassandra中。 哈希显示为< code>{ "Q17.1_4"= 已将表定义为: 整数 时间戳 地图 PK(int,时间戳) 我可以把PK插入ok,但是我很难把哈希值强制转换成Cassandra可以处理的东西。 创建了一个准备好的语句,并在(尝试)遍历值时使用它: 如果我将“val”作

  • 问题内容: 我知道该信息在枚举中可用。 如何打印所有枚举值,如:? 输出: 姓名 教育 电子邮件 电话 如何在另一个函数中将该枚举作为arg 传递? 问题答案: 您的第二部分…与或一样

  • 问题内容: 我遇到了这个问题,我不知道需要迭代其实际值的实际类型。 任何想法如何从enumValue中提取其可能的值? 问题答案:

  • 我使用Enum4库创建enum类,如下所示: 我想在某处打印作为列表。如何实现这一点?