如何比较基于键2个包含HashMap,如果值不匹配,我需要打印的不匹配项和值
我会解释的情况下,我有两个哈希地图让我们如何比较基于键2个包含HashMap,如果值不匹配,我需要打印的不匹配项和值
Map<String,String> map_A = new HashMap<>();
mapA.put("Name", "Jerry");
mapA.put("State", "Texas");
Map<String,String> map_B = new HashMap<>();
mapB.put("Name","TOM");
mapB.put("State", "Texas");
我的钥匙将是相同的在所有情况下。
预期输出:
名称杰里汤姆不匹配
我只需要打印的情况下,如果有一个不匹配。
根据不同的按键会相同,显示不同的值的关键,你可以尝试这样的
public class test {
public static void main(String args[]){
HashMap<String, String> map1 = new HashMap<>();
HashMap<String,String> map2 = new HashMap<>();
map1.put("Name", "Jerry");
map1.put("State", "Texas");
map2.put("Name","TOM");
map2.put("State", "Texas");
Iterator<?> it = map1.entrySet().iterator();
Iterator<?> it1 = map2.entrySet().iterator();
while (it.hasNext() && it1.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
Map.Entry pair1 = (Map.Entry)it1.next();
if(!pair.getValue().equals(pair1.getValue())) {
System.out.println(pair.getKey()+" "+pair.getValue()+" "+pair1.getValue()+" mismatched");
}
}
}
}
输出一些东西
Name Jerry TOM mismatched
你可以试试这个:
public static void main(String[] args) {
Map<String,String> mapA = new HashMap<>();
mapA.put("Name", "Jerry");
mapA.put("State", "Texas");
Map<String,String> mapB = new HashMap<>();
mapB.put("Name","TOM");
mapB.put("State", "Texas");
Set<String> bKeys = mapB.keySet();
mapA.keySet().stream()
.filter(bKeys::contains)
.distinct()
.map(key -> {
String valA = mapA.get(key);
String valB = mapB.get(key);
if (Objects.equals(valA, valB)) {
return null;
}
return key + " " + valA + " vs " + valB + " mismatched";
})
.filter(Objects::nonNull)
.forEach(System.out::println);
}
@PrishiKumar阅读关于流https://www.tutorialspoint.com/java8/java8_streams.htm –
谢谢叶戈尔,但是这只检查第一对 –
不,它是为mapA和MapB的所有键itarate,并获得不同的键值。之后,我们检查map中的值是否等于并用diff来创建字符串 –
你有问题吗?如果您尝试过这样并且无法正常工作,请发布您尝试的内容。如果您还没有尝试过,请先尝试。 – ajb
由于缺乏尝试/以前的研究而陷入低估。这是非常基本的东西,而且这些东西有很多例子。除此之外:阅读有关原始类型 - 然后停止使用它们。您应该在地图声明的左侧放置类型信息! – GhostCat
有什么问题?获取关键值的值如果不相等则比较值然后打印键。 – Lokesh