如何比较两个哈希映射并为相同的值显示true?

时间:2015-03-04 17:59:08

标签: java

我已经编写了两个具有相同键但值不同的哈希图的程序

会话密钥和值 1:红色 2:绿色 3:蓝色 4:紫罗兰

数据库密钥和值 1:灰色 2:粉红色 3:蓝色 4:黑色

我想要实现的是比较两个hashmaps值并列出所有内容,但具有相同值的那些应该显示为true 像这样 1红灰色假 2绿粉色假 3蓝蓝色真实 4紫罗兰黑假

ClassComparator.java:我刚刚编写了这个程序来打印两个哈希映射的值,请为解决进一步的查询提供一些帮助。

public class ClassComparator {

Map<Integer, String> sessionValues;
Map<Integer, String> dbValues;
Map<Integer, String> combineKeyValues;

public ClassComparator() {
    // /////popuulate session Values
    combineKeyValues = new HashMap<Integer, String>();
    sessionValues = new HashMap<Integer, String>();
    sessionValues.put(1, "red");
    sessionValues.put(2, "green");
    sessionValues.put(3, "blue");
    sessionValues.put(4, "violet");
    System.out.println("Session Values : " + sessionValues);
    dbValues = new HashMap<Integer, String>();
    dbValues.put(1, "gray");
    dbValues.put(2, "pink");
    dbValues.put(3, "blue");
    dbValues.put(4, "black");
    System.out.println("Database Values : " + dbValues);
    System.out.println("");
}

public List<QuestionResult> compareValues() {
    List<QuestionResult> results = new ArrayList<QuestionResult>();

    // /// comparison logic
    System.out.println("Session Key and Values");
    for (Map.Entry<Integer, String> sessionEntry : sessionValues.entrySet()) {
        System.out.println(sessionEntry.getKey() + " : " + 
        sessionEntry.getValue());
    }
    System.out.println("");
    System.out.println("Database Key and Values");
    for (Map.Entry<Integer, String> dbEntry : dbValues.entrySet()) {
        System.out.println(dbEntry.getKey() + " : " + dbEntry.getValue());
    }

    return results;
}

public static void main(String args[]) {
    ClassComparator cc = new ClassComparator();
    cc.compareValues();
}

谢谢。

1 个答案:

答案 0 :(得分:3)

您不需要2个单独的循环。迭代第一个地图,并从其他地图获取该键的值,并进行比较。

示例代码:

Map<Integer, String> firstMap = new HashMap<Integer, String>();
Map<Integer, String> secondMap = new HashMap<Integer, String>();

for (Entry<Integer, String> firstEntry : firstMap.entrySet()) {
  String firstMapValue = firstEntry.getValue();
  String secondMapValue = secondMap.get(firstEntry.getKey());
  System.out.println(firstEntry.getKey() + " " + firstMapValue + " " + secondMapValue + " " + firstMapValue.equals(secondMapValue));
}