我想用JAVA写一个函数来比较地图列表,如果有任何差异,它应该打印结果,而不仅仅是布尔值



考虑以下地图列表:

List<LinkedHashMap<String, String>> allTableData = new ArrayList<>();

LinkedHashMap<String, String> eachRowData = new LinkedHashMap<>();
eachRowData.put("key1", "value1");
eachRowData.put("key2", "value2");
allTableData.add(eachRowData);
System.out.println(allTableData);

List<LinkedHashMap<String, String>> allTableData1 = new ArrayList<>();

LinkedHashMap<String, String> eachRowData1 = new LinkedHashMap<>();
eachRowData1.put("key1", "value4");
eachRowData1.put("key2", "value2");
allTableData1.add(eachRowData1);

如果存在差异,则应打印/返回allTableData key1=value1和allTableData1 key1=value4,其中索引的值不匹配。

提前谢谢。

数据结构不利于实现您想要的。

因此,首先将其转换为可以完成任务的内容。然后,你可以做到。

所需的数据结构将给定键映射到所有唯一值中。然后,您可以打印观察值列表大于1的所有键。

HashMap<String, Set<String>> allValues = new HashMap<>();
for (var inMap : allTableData) {
for (var e : inMap.entrySet()) {
allValues
.computeIfAbsent(e.getKey(), k -> new HashSet<>())
.add(e.getValue());
}
}
for (var e : allValues.entrySet()) {
if (e.getValue().size() < 2) continue;
System.out.printf("Key %s has values: %sn", e.getKey(), e.getValue());
}

相关内容

最新更新