在 Java HashMap<String, String[]中查找元素>



我很难在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;
}

您可以通过Streams在entrySetfilter

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]

演示

最新更新