【问题标题】:Can compare values from Map<Integer, ArrayList<String>> with ArrayList<String>可以比较 Map<Integer, ArrayList<String>> 和 ArrayList<String> 的值
【发布时间】:2020-05-17 18:44:58
【问题描述】:

我创建了一个Map&lt;Integer, ArrayList&lt;String&gt;&gt; map,我想将映射中的每个值与一个ArrayList&lt;String&gt; likeList 进行比较,如果它们匹配则获取密钥。我会带上钥匙,以备后用。

我尝试像这样运行我的代码,但它不起作用,因为它什么都不返回:

for (int key : map.keySet()) {
    if(map.get(key).equals(likeList)){
        index = key;
        Log.d("IndexN", String.valueOf(index));
    }
}

然后,我尝试了这个:

int index = 0;
for (Map.Entry<Integer, ArrayList<String>> entry : map.entrySet()) {
    if(entry.getValue().equals(likeList)){
        index = entry.getkey();
    }
}

你有什么想法吗?

【问题讨论】:

  • 请说明您到底想做什么。您想将地图中的每个ArrayList&lt;String&gt; 与您的likeList 进行比较,并在它们匹配时获取相应的键吗?另外,it doesn't work 是什么意思?请指定预期和实际输出。
  • 如果您编辑您的问题并包含一个具有预期输出的示例,那将会很好
  • 当我尝试上面的代码时它不返回索引。不便见谅,第一次使用stackoverflow
  • @pranpreya_s - 如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。查看meta.stackexchange.com/questions/5234/… 了解如何操作。

标签: java arraylist hashmap


【解决方案1】:

添加一个键列表来存储所有匹配项

List<Integer> indices = new ArrayList<>();
for (int key : map.keySet()) {
    if (map.get(key).equals(likeList)) {
        indices.add(key);
    }
}

【讨论】:

    【解决方案2】:

    当我尝试上面的代码时它不返回索引。

    从这条评论中,我了解到,一旦您在地图中找到匹配项,就应该记录 index 并停止进一步的处理。换句话说,要么地图中只有一个likeList 匹配,要么你想在地图中找到likeList 的第一个匹配。如果是,您需要在找到匹配项后立即中断循环(如下所示)。

    for (int key : map.keySet()) {
        if (map.get(key).equals(likeList)) {
            Log.d("IndexN", String.valueOf(index));
            break;
        }
    }
    

    请注意,每次执行它时,这将为您提供相同的值,仅当映射只有一个匹配 likeList 或映射是 LinkedHashMap 时。如果它是 HashMap 并且有多个匹配的 likeList,则每次执行它时可能会得到不同的值,因为 HashMap 不保证其条目的顺序。

    但是,如果映射中可以有多个 likeList 匹配,并且您想记录所有匹配并获取相应键的列表,则可以执行以下操作:

    List<Integer> indexList = new ArrayList<>();
    for (int key : map.keySet()) {
        if (map.get(key).equals(likeList)) {
            Log.d("IndexN", String.valueOf(index));
            indexList.add(key);
        }
    }
    
    // Display the list of corresponding keys
    System.out.println(indexList);
    

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2021-02-21
      • 1970-01-01
      • 2016-01-08
      • 2015-06-07
      • 2020-01-26
      相关资源
      最近更新 更多