如何比较HashMap 数据和ArrayList 数据?

How to compare the HashMap data and the ArrayList data?

我有以下仅打印 keySet() 的 HashMap 数据:-

[P001, P003, P005, P007, P004, P034, P093, P054, P006]

并将以下 ArrayList 数据作为输出:-

[P001]
[P007]
[P034]
[P054]

这就是他们两人的打印方式。我想将数组列表数据与哈希映射数据一一比较。因此,值 [P001] 应该存在于 HashMap 中。

这是我试过的部分代码:-

def count = inputJSON.hotelCode.size() // Where "hotelCode" is particular node in inputJSON

Map<String,List> responseMap = new HashMap<String, List>()
for(int i=0; i<count; i++) {
    Map jsonResult = (Map) inputJSON
    List hotelC = jsonResult.get("hotelCode")
    String id = hotelC[i].get("id")
    responseMap.put(id, hotelC[i])
}

String hotelCFromInputSheet = P001#P007#P034#P054
String [] arr  = roomProduct.split("#")
for(String a : arr) {
    ArrayList <String> list = new ArrayList<String>()
    list.addAll(a)

    log.info list
    log.info responseMap.keySet()

    if(responseMap.keySet().contains(list)) {
        log.info "Room Product present in the node"
    }
}

如有任何帮助,我们将不胜感激。

你可以使用SetcontainsAll方法,它接受一个集合:

if(responseMap.keySet().containsAll(list)) {

不确定您的代码能否编译,但至少可以简化它:

String hotelCFromInputSheet = 'P001#P007#P034#P054'
ArrayList <String> list  = Arrays.asList(roomProduct.split("#"))
boolean containsAll = responseMap.keySet().containsAll(list)

在这一行中,您检查 keySet 是否包含 whole list:

if (responseMap.keySet().contains(list)) {
    log.info "Room Product present in the node"
}

我认为您的意图是检查它是否包含已添加到当前正在处理的循环中的字符串:

if (responseMap.keySet().contains(a)) {
        log.info "Room Product present in the node"
}

此外,在这一行中:list.addAll(a) 您实际上是在添加一个字符串,因此可以将其替换为 list.add(a) 以使您的代码更清晰一些。

编辑:如果要打印与指定键关联的字符串 ArrayList 中存在的值,您可能想尝试使用这样的循环:

if (responseMap.keySet().contains(a)) {
    List<String> strings = responseMap.get(a);
    for (String s : strings) {
        System.out.println(s + ", ");
    }
}