如何在Hashmap值中检查子字符串

时间:2019-08-13 15:36:59

标签: java hashmap

我有一个HashMap<String, String>

map= {john=a024600000372TPAAY, Jam=Jam is not recognized, Dave=a024600000A1ndhAAB}

我想确定我的哈希图是否具有子字符串为“无法识别”的任何值。

当我尝试map.containsValue("not recognized")时,它返回一个false,因为它正在寻找“无法识别”的值,但是我应该找到一种检查子字符串的方法。

map.containsValue("not recognized")

5 个答案:

答案 0 :(得分:5)

除了遍历所有值之外,没有其他好方法。 最简单的方法可能是使用流

map.values().stream()
            .filter(e -> e.contains("not recognized"))
            .findFirst()
            .orElse(null);

如果匹配则返回值,否则返回null。

答案 1 :(得分:1)

map.containsValue在地图上所有可用值中寻找确切值,因此您应该使用类似以下的内容:

boolean contains = false;
for (String value : map.values()) {
    if(value.contains("not recognized")){
        contains = true;
        break;
    }
}
if(contains){
    System.err.println("Map contains value");
}

答案 2 :(得分:0)

没有内置功能。<​​/ p>

您必须为此编写自己的代码,以迭代映射(值),然后进行所需的任何检查。使用Java8,类似于:

yourMap.values().stream().filter(v -> v.contains("not recognized")).count();

例如。

并注意:如果您要谈论的是真正的大地图和大量数据,那么您应该考虑使用更合适的数据结构。旨在通过快速访问地图,而不是通过地图值的属性。如果这样的“文本搜索”是您的主要要求,那么可以使用“全文搜索引擎”,例如lucene

答案 3 :(得分:0)

尝试一下。

      Map<String, String> map = Map.of("john",
            "a024600000372TPAAY",
            "Jam",
            "Jam is not recognized",
            "Dave",
            "a024600000A1ndhAAB");
      for (String key : map.keySet()) {
         if (map.containsValue(key + " is not recognized")) {
            System.out.println(key + " -> " + map.get(key));
         }
      }

我从字面上拿了您的地图示例。如果您想获取第一个“无法识别”的物品的钥匙,您可以这样做。

      String key = map.entrySet().stream().filter(
            e -> e.getValue().contains("not recognized")).map(
                  e -> e.getKey()).findFirst().orElse("All are recognized");
      System.out.println(key);

答案 4 :(得分:0)

问题已经有一些答案。我相信,作为OP,我们更担心Map值是否包含字符串“ not not found”,这意味着boolean值就足够了。在这种情况下,我认为下面的解决方案将得到更优化。

map.values()
    .stream()
    .anyMatch(e -> e.contains("not recognized"));