【问题标题】:Find element in Java HashMap<String, String[]>在 Java HashMap<String, String[]> 中查找元素
【发布时间】:2021-04-16 14:52:45
【问题描述】:

我无法在我的 HashMap 中包含的字符串数组中找到一个元素。我有一个确实在这个 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(),但没有成功。

我做错了吗?谢谢!

【问题讨论】:

  • 请显示更多您的代码
  • 欢迎来到 Stack Overflow!您的值是数组,而不是字符串。因此,例如,没有一个值可以等于 "someString"。如果这是必要的操作,您可能需要重新考虑您的结构。否则,如果必须使用此结构,则必须遍历值并检查每个 String[] 是否有匹配的元素。
  • 您可以遍历地图的条目(键值对)并查找值然后返回键。
  • 如果可以在多个数组的多个键中找到该字符串,那么应该返回哪个键呢?他们全部?找到第一个配件?
  • @BerkKurkcuoglu 我尝试遍历条目但没有成功,我认为正如 Henry Twist 所说,我的值是数组而不是字符串。

标签: java hashmap


【解决方案1】:

在 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;
}

【讨论】:

    【解决方案2】:

    您可以通过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

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2011-12-11
      • 2017-08-30
      • 1970-01-01
      • 2021-11-13
      • 2014-09-15
      相关资源
      最近更新 更多