java - 包含在 List 或 Set 中未找到部分字符串

标签 java collections contains

我目前有一个包含三个字符串( "car""two dollar""foo" )的集合。然后我对传递的 HashMap<String, Double> 执行以下操作.

if (getSet().contains(currentHashMapItem.getKey()) == true) {
    System.out.println(currentHashMapItem.getKey());
}

第一个键是"car" , 按预期匹配并显示。但是,第二个键是 "dollar" ,但不显示。现在我对 contains 如何工作的理解是,如果它正在比较的字符串存在于 getSet() 中返回的 Set 中,它将返回 true。 , 但没有骰子。甚至尝试了 ArrayList<String>也没有运气。有人遇到过这个吗?我是否试图切得太尖锐并被迫使用正则表达式或迭代器循环?

最佳答案

问题是你的 Set不包含“dollar”而是“two dollar”。因此它包含一个包含键但不直接包含键的字符串。作为Set.contains()方法 uses .equals() ,除非 key 相同,否则这将失败。

您可以遍历键集并查看是否有 String.contains()你的 key 。

作为附加选项,您可以制作一个新的 Set自己上课contains()使用 String.contains() 的方法(覆盖或重载当前方法)比较方法而不是 .equals() .这可以通过三种方式完成:

实现 Set接口(interface)
-方便并且可以简单地使 boolean contains(Object) 过载使用 boolean contains(String) 的方法选项(也可以查看使用 AbstractSet 类)

Composition
-允许使用不同类型的 Set (例如 HashSetTreeSet 等),而不是更通用的接口(interface)

继承
-类似于组合,但不太优雅和合适的选项
- 仅当您有其他原因想要 child 上课时才这样做

关于java - 包含在 List 或 Set 中未找到部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388383/

相关文章:

java - JScrollPane 内的 JTable : best height to disable scrollbars

java - 如何使我的 Dijkstra 算法更高效

javascript:将 classList 替换为条件条件

c++ - boost::algorithm::contains std::vector<long> & long 值

java - 获取正则表达式的匹配值

java - 如何让按钮读取文本并执行特定功能

java - 从 Java 对象更新/合并 SQLite 数据库表

java - 列表的方法(如 remove、contains、removeAll)具有 Object 类型参数而不是通用 <T> 类型

java - 如何在多个集合中找到最受欢迎的元素

list - Dart/Flutter-比较两个List <dynamic>,如果它们具有相同的id值