【问题标题】:Compare value according to key in LinkedHashMap to another LinkedHashMap using java使用java根据LinkedHashMap中的键将值与另一个LinkedHashMap进行比较
【发布时间】:2019-08-12 15:24:05
【问题描述】:

我有两个链接的 hashmap (key - String, value = String[]),它们在两个链接的 hashmap 中具有相同的大小和相同的键,我希望能够根据键比较值,验证一个链接的 hashmap 上的值是否等于第二个链接的哈希图中的相同值(按键)或至少另一个链接的哈希图中包含这些值。

我正在使用键和值填充两个链接的哈希映射,并将其设置为不同的链接哈希映射。

hashmap 示例:

键 - 警报 - 值(字符串数组)

0 - Device_UID,Instance_UID,Configuration_Set_ID,Alert_UID
1 - a4daeccb-0115-430c-b516-ab7edf314d35,0a7938aa-9a01-437f-88ac-4b2927ed7665,96,61b68069-9de7-4b85-83cb-8d9f558e8ecb
2 - a4daeccb-0115-430c-b516-ab7edf314d35,0a7938aa-9a01-437f-88ac-4b2927ed7665,12,92757faa-bf6b-4aa3-ba6d-2e57b44f333c
3 - a4daeccb-0115-430c-b516-ab7edf314d35,0a7938aa-9a01-437f-88ac-4b2927ed7665,369,779b3294-2ca3-4613-a413-bf8d4aa05d16

并且它至少应该在第二个链接的哈希映射中

String rdsColumns="";
for(String key : mapServer.keySet()){
    String[] value = mapServer.get(key);
    String[] item = value[0].split(",");
    rdsColumns="";
    for(String val:item){
        rdsColumns = rdsColumns.concat(val + ",");
    }
    rdsColumns = rdsColumns.concat(" ");
    rdsColumns = rdsColumns.replace(", ", "");
    info(("Query is: "+ returnSuitableQueryString(rdsColumns, key, alertId, deviceId)));
    String query=returnSuitableQueryString(rdsColumns, key, alertId, deviceId);
    mapRDS.put(key, insightSQL.returnResultsAsArray(query ,rdsColumns.split(","),rdsColumns));
}

rdsColumns 是我在 RDS 数据库中查询的字段。

预期:遍历两个映射并验证根据第一个映射中的键的所有值在第二个映射中是否包含或相等。

【问题讨论】:

  • “或者至少另一个链接的 hashmap 包含值”。也许你应该试试containsValue
  • @Gaurav Mall - 感谢您的回复,我想知道如何使用 containsValue 从一张地图中获取密钥并检查第二张地图的值。
  • @Gaurav Mall - 这很简单,我希望能够检查第一个映射中的值是否存在于第二个映射中(映射具有相同的键和相同的顺序)。

标签: java arrays comparison linkedhashmap


【解决方案1】:

这是您要查找的代码:

for (String keys : firstMap.keySet()) {
     String[] val1 = firstMap.get(keys);
     String[] val2 = secondMap.get(keys);

     if (Arrays.equals(val1, val2)) {
         //return true;
     }

     ArrayList<Boolean> contains = new ArrayList<>();

     for (int i = 0; i < val1.length; i++) {
          for (String[] secondMapVal : secondMap.values()) {
               List<String> list = Arrays.asList(secondMapVal);

               if (list.contains(val1[i])) {
                   contains.add(true);
                   break;
               } else contains.add(false);
          }
     }


     if (contains.contains(true)) {
         //return true; Even a single value matches up
     } else {
         //return false; Not even a sinle value matches up
     }
}

基本上我们这里有一个HashMap&lt;String, String&gt;。我们获取一组键并遍历它们。然后我们从两组中获取带有键的值。在我们得到值后,我们比较它们,如果它们相同,我只打印它们匹配。您可以更改它并使用其他类型的 HashMap 来实现它,即使您使用自定义值也是如此。如果我不明白您的问题,请告诉我,我会编辑答案。

【讨论】:

  • 我们有HashMap&lt;String, String[]&gt;,您可以将此方法称为boolean,您可以返回truefalse
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多