我有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}
在两个列表中都是常见的。
答案 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");
}}