如何判断两个List<Map>中某一个value不一样的结果集
时间: 2024-03-16 09:44:54 浏览: 72
判断List和Map是否相等并合并List中相同的Map
5星 · 资源好评率100%
可以按照以下步骤实现:
1. 遍历第一个 `List<Map>`,将每个 `Map` 中的值存储到一个 `Set` 中。
2. 遍历第二个 `List<Map>`,对于每个 `Map`,遍历其中的值。如果某个值在第一个 `Set` 中不存在,或者值存在但与第一个 `List<Map>` 中的不同,则说明这个值是不同的,可以将其输出或存储到一个新的 `List` 中。
以下是示例代码:
```java
List<Map<String, Object>> list1 = ...; // 第一个 List<Map>
List<Map<String, Object>> list2 = ...; // 第二个 List<Map>
// 存储第一个 List<Map> 中所有的值
Set<Object> valueSet = new HashSet<>();
for (Map<String, Object> map : list1) {
valueSet.addAll(map.values());
}
// 遍历第二个 List<Map>,找到不同的值
List<Object> differentValues = new ArrayList<>();
for (Map<String, Object> map : list2) {
for (Object value : map.values()) {
if (!valueSet.contains(value)) {
// 值不存在
differentValues.add(value);
} else {
// 值存在,但与第一个 List<Map> 中的不同
boolean isDifferent = list1.stream()
.flatMap(m -> m.entrySet().stream())
.anyMatch(e -> e.getValue().equals(value)
&& !map.getOrDefault(e.getKey(), "").equals(e.getValue()));
if (isDifferent) {
differentValues.add(value);
}
}
}
}
// 输出结果
System.out.println(differentValues);
```
以上代码中,我们使用了 Java 8 中的 `stream` API 和 Lambda 表达式,代码比较简洁。在实际使用中,如果数据量较大,可能需要考虑性能问题,可以将 `stream` 替换为传统的遍历方式。
阅读全文