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

时间:2018-01-02 06:28:48

标签: arraylist groovy hashmap ready-api

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

[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"
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用containsAll的{​​{1}}方法,该方法需要一个集合:

Set

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

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

答案 1 :(得分:1)

在此行中,检查keySet是否包含整个列表:

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 + ", ");
    }
}