我很难在HashMap中的String数组中找到一个元素。我有一个字符串,它确实在这个String[]中,但执行以下操作不起作用。
if (groupOuMap.containsValue("someString")) {
groupOu = "someString";
}
我的目标是在找到值的HashMap中找到相应的键。
我的地图示例:
nedcard.nl -> ["Wijchen account"]
mic.ad -> ["Ayutthaya4", "Brazil", "Changi", "Dresden", "Guangzhou"]
如果我搜索字符串Brazil
,我希望有一个新的字符串数组,它将是:
String[] groupOu = {"mic.ad", "Brazil"};
我也尝试过使用groupOuMap.values().contains()
,但没有成功。
我做错了吗?非常感谢。
在Java中,最简单的方法可能只是遍历映射中的每个键值对,并搜索数组中第一个出现的搜索项,即值。找到后,返回键和值。如果未找到,则返回null
。
public static String[] keyContainingValue(HashMap<String, String[]> map, String searchFor) {
for (String key : map.keySet()) {
String[] values = map.get(key);
// construct for replicating List.contains() on a primitive array
if (Arrays.stream(values).anyMatch(i -> i.equals(searchFor))) {
return {key, searchFor};
}
}
return null;
}
您可以通过Stream
s在entrySet
上filter
。
public static String[] search(Map<String, String[]> map, String value){
return map.entrySet().stream()
.filter(e -> Arrays.stream(e.getValue()).anyMatch(value::equals))
.findAny().map(e -> new String[]{e.getKey(), value}).orElse(null);
}
//...
Map<String, String[]> map = Map.of("mic.ad", new String[]{"Ayutthaya4", "Brazil", "Changi", "Dresden", "Guangzhou"}, "nedcard.nl", new String[]{"Wijchen account"});
System.out.println(Arrays.toString(search(map, "Brazil"))); // [mic.ad, Brazil]
演示