2个List<Map<String,String>>,list里包含多个map,list添加map时是无序的,对比2个list的不同的字段
时间: 2024-02-21 17:01:55 浏览: 38
好的,根据你的说明,两个List中的Map是无序的,那么我们需要对Map的键值对进行排序后再进行比较。具体实现如下:
```java
// 假设 list1 和 list2 分别为两个List<Map<String,String>>
if (list1.size() != list2.size()) {
// 如果两个List的大小不一致,则它们不同
System.out.println("两个List不同");
return;
}
// 比较每一个Map
for (int i = 0; i < list1.size(); i++) {
Map<String, String> map1 = list1.get(i);
Map<String, String> map2 = list2.get(i);
// 对Map的键值对进行排序
List<Map.Entry<String, String>> sortedEntries1 = new ArrayList<>(map1.entrySet());
Collections.sort(sortedEntries1, Comparator.comparing(Map.Entry::getKey));
List<Map.Entry<String, String>> sortedEntries2 = new ArrayList<>(map2.entrySet());
Collections.sort(sortedEntries2, Comparator.comparing(Map.Entry::getKey));
// 比较排序后的两个Map中的不同字段
List<String> differentFields = new ArrayList<>();
for (int j = 0; j < sortedEntries1.size() && j < sortedEntries2.size(); j++) {
Map.Entry<String, String> entry1 = sortedEntries1.get(j);
Map.Entry<String, String> entry2 = sortedEntries2.get(j);
if (!entry1.getKey().equals(entry2.getKey()) || !entry1.getValue().equals(entry2.getValue())) {
differentFields.add(entry1.getKey());
}
}
if (!differentFields.isEmpty()) {
// 如果两个Map之间有不同的字段,则它们不同
System.out.println("第 " + (i + 1) + " 个Map不同,不同的字段有:" + differentFields);
return;
}
}
// 如果所有的Map都相同,则两个List相同
System.out.println("两个List相同");
```
这段代码会先对Map的键值对进行排序,然后再比较排序后的两个Map中的不同字段。如果两个List完全相同,则会输出"两个List相同";否则会输出不同的字段以及它们所在的Map的编号。
阅读全文