有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可以比较Map<Integer,ArrayList<String>>和ArrayList<String>

我创建了一个Map<Integer, ArrayList<String>> map,我想将映射中的每个值与一个ArrayList<String> 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();
    }
}

你知道吗


共 (2) 个答案

  1. # 1 楼答案

    添加密钥列表以存储所有匹配项

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

    It does not return index when I try the code above.

    从这条评论中,我了解到,一旦在地图中找到匹配项,就应该记录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);