为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容708150 2023-06-04 15:25:54
我有一个HashMap<String, String>。map= {john=a024600000372TPAAY, Jam=Jam is not recognized, Dave=a024600000A1ndhAAB}我想查找我的哈希图是否具有任何具有“未识别”子字符串的值。当我尝试map.containsValue("not recognized")返回 false 时,因为它正在寻找一个“未识别”的值,但我应该找到一种方法来检查子字符串。map.containsValue("not recognized")
查看完整描述

5 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

除了遍历所有值之外,没有什么好的方法可以做到这一点。最短的方法可能是使用流

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

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


查看完整回答
反对 回复 2023-06-04
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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

}


查看完整回答
反对 回复 2023-06-04
?
SMILET

TA贡献1796条经验 获得超4个赞

没有内置函数。

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

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

例如。

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


查看完整回答
反对 回复 2023-06-04
?
呼唤远方

TA贡献1856条经验 获得超11个赞

尝试这个。


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



查看完整回答
反对 回复 2023-06-04
?
撒科打诨

TA贡献1934条经验 获得超2个赞

问题已经有了一些答案。我相信 OP 更关心值是否Map包含字符串“未识别”,这意味着该boolean值就足够了。在那种情况下,我认为下面的解决方案会更加优化。

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


查看完整回答
反对 回复 2023-06-04
  • 5 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信