如何将HashMap列表与选定键进行比较

时间:2019-01-25 03:15:32

标签: java data-structures hashmap

我有2个列表需要比较,并获取列表A哈希图与列表B哈希图匹配。如果有任何一个HahMap匹配,请说“匹配”

这是结构

列表1:-

[{level=3, SubTypeId=12345, TypeId=65}, {level=4, SubTypeId=2310, TypeId=7230}, {level=4, SubTypeId=2311, TypeId=7230}]

清单2:

[{TypeId=12345, SubTypeId=65}, {TypeId=8100, SubTypeId=63}]

这里List1 hashMap有一个名为level的额外字段

HashMap {TypeId=12345, SubTypeId=65}在两个列表中都是常见的。

2 个答案:

答案 0 :(得分:1)

最好的办法是找到匹配项后 break 。以下代码显示了如何使用anyMatch进行操作。但是,在最坏的情况下,一个列表中的每个映射都需要与另一个列表中的每个映射进行比较。没有办法解决。

List<Map<String, Integer>> list1, list2;
...
boolean matched = list2.stream()
        .anyMatch(list2Map -> list1.stream()
                .anyMatch(map -> map.get("SubTypeId").equals(list2Map.get("SubTypeId"))
                        && map.get("TypeId").equals(list2Map.get("TypeId"))));
System.out.println(matched);

答案 1 :(得分:-1)

package com.era.demo;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class CompareListHashMap {public static void main(String[] args) {
    List<HashMap<String, Integer>> list1 = Arrays.asList(new HashMap<String, Integer>() {{
        put("level", 3);
        put("SubTypeId", 12345);
        put("TypeId", 65);
    }},
    new HashMap<String, Integer>() {{
        put("level", 4);
        put("SubTypeId", 2310);
        put("TypeId", 7230);
    }},
    new HashMap<String, Integer>() {{
        put("level", 4);
        put("SubTypeId", 2311);
        put("TypeId", 7230);
    }});

    List<HashMap<String, Integer>> list2 = Arrays.asList(
            new HashMap<String, Integer>() {{
                 put("SubTypeId", 12345);
                 put("TypeId", 65);
             }},
            new HashMap<String, Integer>() {{
                put("SubTypeId", 8100);
                put("TypeId", 63);
            }});
   if (list1.stream().anyMatch(stringIntegerHashMap -> list2.stream().anyMatch(stringIntegerHashMap1 ->
            stringIntegerHashMap.get("SubTypeId").equals(stringIntegerHashMap1.get("SubTypeId")) && stringIntegerHashMap.get("TypeId").equals(stringIntegerHashMap1.get("TypeId")))))
       System.out.println("Matched");
}}