我有一个HashMap<String, String>
。
map= {john=a024600000372TPAAY, Jam=Jam is not recognized, Dave=a024600000A1ndhAAB}
我想确定我的哈希图是否具有子字符串为“无法识别”的任何值。
当我尝试map.containsValue("not recognized")
时,它返回一个false,因为它正在寻找“无法识别”的值,但是我应该找到一种检查子字符串的方法。
map.containsValue("not recognized")
答案 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"));