5 回答
TA贡献1851条经验 获得超5个赞
除了遍历所有值之外,没有什么好的方法可以做到这一点。最短的方法可能是使用流
map.values().stream() .filter(e -> e.contains("not recognized")) .findFirst() .orElse(null);
如果匹配则返回值,如果不匹配则返回 null。
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");
}
TA贡献1796条经验 获得超4个赞
没有内置函数。
您必须编写自己的代码来迭代映射(值),然后执行您需要的任何检查。使用 Java8,类似于:
yourMap.values().stream().filter(v -> v.contains("not recognized")).count();
例如。
并注意:如果您谈论的是非常大的地图和大量数据,那么您应该考虑使用更合适的数据结构。地图旨在通过键快速访问,而不是通过地图值的属性。如果这种“文本搜索”是您的主要要求,那么“全文搜索引擎”,如lucene。
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);
TA贡献1934条经验 获得超2个赞
问题已经有了一些答案。我相信 OP 更关心值是否Map
包含字符串“未识别”,这意味着该boolean
值就足够了。在那种情况下,我认为下面的解决方案会更加优化。
map.values() .stream() .anyMatch(e -> e.contains("not recognized"));
添加回答
举报