繁体   English   中英

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

[英]How to check for a substring in a Hashmap values

我有一个HashMap<String, String>

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

我想查找我的哈希图是否具有“未识别”子字符串的任何值。

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

map.containsValue("not recognized")

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

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

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

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");
}

没有内置功能。

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

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

例如。

请注意:如果您要谈论的是非常大的地图和大量数据,则应考虑使用更合适的数据结构。 映射旨在通过而不是通过映射值的属性快速访问。 如果您最需要这种“文本搜索”,那么可以使用lucene之类的“全文搜索引擎”。

尝试这个。

      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);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM