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

Find element in 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 中,执​​行此操作的最简单方法可能只是遍历映射中的每个键值对,并在数组中搜索第一次出现的搜索词即值。找到后,return 键和值。如果没有找到,return 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]

Demo