如何比较两个哈希映射? [英] how to compare two hash maps?

查看:87
本文介绍了如何比较两个哈希映射?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在键的帮助下比较两个哈希映射中的值?由于键是相同的而值不是。
并返回每个键比较的布尔结果。
like:

How to compare the values in both hash maps with the help of keys ? Since the keys are identical whereas values are'nt. and return boolean result for each key comparision. like:

map1=[1,res]
[2,tr]
[3,677]
[4,cv]  

map2=[1,res]
[2,cd]
[3,677]
[4,fs]

它应该给我回报

true
false
true
false


推荐答案

这是一个生成结果Map的方法(键的布局映射到布尔值)。无论键和键排序顺序如何,它都会很好地发挥作用:

Here's a method that generates a Map of the results (Map of key to boolean). It will play nicely regardless of different keys and key sort order:

/**
 * Works with any two maps with common key / value types.
 * The key type must implement Comparable though (for sorting).
 * Returns a map containing all keys that appear in either of the supplied maps.
 * The values will be true if and only if either
 *   - map1.get(key)==map2.get(key) (values may be null) or
 *   - map1.get(key).equals(map2.get(key)).
 */
public static <K extends Comparable<? super K>, V>
Map<K, Boolean> compareEntries(final Map<K, V> map1,
    final Map<K, V> map2){
    final Collection<K> allKeys = new HashSet<K>();
    allKeys.addAll(map1.keySet());
    allKeys.addAll(map2.keySet());
    final Map<K, Boolean> result = new TreeMap<K, Boolean>();
    for(final K key : allKeys){
        result.put(key,
            map1.containsKey(key) == map2.containsKey(key) &&
            Boolean.valueOf(equal(map1.get(key), map2.get(key))));
    }
    return result;
}

private static boolean equal(final Object obj1, final Object obj2){
    return obj1 == obj2 || (obj1 != null && obj1.equals(obj2));
}

用法:

public static void main(final String[] args){
    final Map<Integer, String> map1 = new HashMap<Integer, String>();
    map1.put(1, null);
    map1.put(2, "Different");
    map1.put(3, "Same");
    map1.put(4, "First Map only");
    final Map<Integer, String> map2 = new HashMap<Integer, String>();
    map2.put(3, "Same");
    map2.put(1, null);
    map2.put(2, "Yup, different");
    map2.put(5, "Second Map only");
    final Map<Integer, Boolean> comparisonResult =
        compareEntries(map1, map2);
    for(final Entry<Integer, Boolean> entry : comparisonResult.entrySet()){
        System.out.println("Entry:" + entry.getKey() + ", value: "
            + entry.getValue());
    }

}

输出:


条目:1,值:true

条目:2,值:false

条目:3,值:true

条目:4,值:false

条目:5,值:false

Entry:1, value: true
Entry:2, value: false
Entry:3, value: true
Entry:4, value: false
Entry:5, value: false

这篇关于如何比较两个哈希映射?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆