猿问

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

我有一个HashMap<String, String>

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

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

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

map.containsValue("not recognized")


慕容708150
浏览 143回答 5
5回答

江户川乱折腾

除了遍历所有值之外,没有什么好的方法可以做到这一点。最短的方法可能是使用流map.values().stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(e&nbsp;->&nbsp;e.contains("not&nbsp;recognized")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.findFirst() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.orElse(null);如果匹配则返回值,如果不匹配则返回 null。

慕妹3146593

map.containsValue在地图中的所有可用值中查找精确值,因此您应该使用如下内容:boolean contains = false;for (String value : map.values()) {&nbsp; &nbsp; if(value.contains("not recognized")){&nbsp; &nbsp; &nbsp; &nbsp; contains = true;&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }}if(contains){&nbsp; &nbsp; System.err.println("Map contains value");}

SMILET

没有内置函数。您必须编写自己的代码来迭代映射(值),然后执行您需要的任何检查。使用 Java8,类似于:yourMap.values().stream().filter(v -> v.contains("not recognized")).count();例如。并注意:如果您谈论的是非常大的地图和大量数据,那么您应该考虑使用更合适的数据结构。地图旨在通过键快速访问,而不是通过地图值的属性。如果这种“文本搜索”是您的主要要求,那么“全文搜索引擎”,如lucene。

呼唤远方

尝试这个。&nbsp; &nbsp; &nbsp; Map<String, String> map = Map.of("john",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "a024600000372TPAAY",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Jam",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Jam is not recognized",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Dave",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "a024600000A1ndhAAB");&nbsp; &nbsp; &nbsp; for (String key : map.keySet()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (map.containsValue(key + " is not recognized")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(key + " -> " + map.get(key));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; }我从字面上看你的地图例子。如果您想获得“未识别”的第一个项目的密钥,您可以这样做。&nbsp; &nbsp; &nbsp; String key = map.entrySet().stream().filter(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e -> e.getValue().contains("not recognized")).map(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e -> e.getKey()).findFirst().orElse("All are recognized");&nbsp; &nbsp; &nbsp; System.out.println(key);

撒科打诨

问题已经有了一些答案。我相信 OP 更关心值是否Map包含字符串“未识别”,这意味着该boolean值就足够了。在那种情况下,我认为下面的解决方案会更加优化。map.values() &nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;.anyMatch(e&nbsp;->&nbsp;e.contains("not&nbsp;recognized"));
随时随地看视频慕课网APP

相关分类

Java
我要回答