2012-05-30 5 views
0

У меня есть два хэш-карта, как следующее:Как сравнить два hashmaps в java?

1.=============Employee================= 


Key : 1_10 : Value : 13/04/2012 
Key : 1_11 : Value : 18/04/2012 
Key : 1_12 : Value : 19/04/2012 
Key : 1_14 : Value : 23/04/2012 
Key : 1_13 : Value : 20/04/2012 
Key : 1_16 : Value : 25/04/2012 
Key : 1_1 : Value : 02/04/2012 
Key : 1_15 : Value : 24/04/2012 
Key : 1_18 : Value : 27/04/2012 
Key : 1_3 : Value : 04/04/2012 
Key : 1_17 : Value : 26/04/2012 
Key : 1_2 : Value : 03/04/2012 
Key : 1_5 : Value : 06/04/2012 
Key : 1_19 : Value : 30/04/2012 
Key : 1_4 : Value : 05/04/2012 
Key : 1_7 : Value : 10/04/2012 
Key : 1_6 : Value : 09/04/2012 
Key : 1_9 : Value : 12/04/2012 
Key : 1_8 : Value : 11/04/2012 

2.=============Working day================= 

Key : 27 : Value : 27/4/2012 
Key : 02 : Value : 02/4/2012 
Key : 26 : Value : 26/4/2012 
Key : 19 : Value : 19/4/2012 
Key : 11 : Value : 11/4/2012 
Key : 04 : Value : 04/4/2012 
Key : 30 : Value : 30/4/2012 
Key : 06 : Value : 06/4/2012 
Key : 13 : Value : 13/4/2012 
Key : 09 : Value : 09/4/2012 
Key : 03 : Value : 03/4/2012 
Key : 23 : Value : 23/4/2012 
Key : 20 : Value : 20/4/2012 
Key : 16 : Value : 16/4/2012 
Key : 10 : Value : 10/4/2012 
Key : 18 : Value : 18/4/2012 
Key : 25 : Value : 25/4/2012 
Key : 17 : Value : 17/4/2012 
Key : 12 : Value : 12/4/2012 
Key : 24 : Value : 24/4/2012 
Key : 05 : Value : 05/4/2012 

ключи не одинаковы, но значения одинаковы, а иногда эти значения не совпадают.

я хочу, чтобы выяснить значение, которое не присутствуют в employeemap при сравнении с workingdaymap

if (!employeeMap.containsValue(workingdayMap.get(wKey))) { 
    //take the value which is not present in employeeMap which is present in workingdayMap 
} 

, но это дает мне нуль из employeeMap.

Не могли бы вы помочь мне решить эту проблему?

С уважением Тони

+2

Заканчивать 'значения()' 'функция HashMap'. – nhahtdh

+2

Не могли бы вы предоставить больше кода, который дает вам «null»? Откуда происходит 'wKey'? Какой тип даты вы используете, и делает ли метод 'equals()' тем, что, по вашему мнению, он делает? –

+0

Iterator workingDayIterator = рабочий деньMap.keySet(). Iterator(); \t \t в то время как (workingDayIterator.hasNext()) { \t \t \t Строка wKey = workingDayIterator.next(); \t \t \t \t \t \t если (! EmployeeMap.containsValue (workingdayMap.получить (wKey))) { \t \t \t \t // получить значения \t \t \t} \t \t \t \t \t} – SAR

ответ

0

Ниже приведен код, который отлично работает, причина неудачи сравнения в том, что значение карты отличается.

Key : 27 : Value : 27/4/2012, Key : 1_18 : Value : 27/04/2012 

Если мы увидим даты, разница четко видна. 27/4/2012 отличается от 27/04/2012, так как я сохранил его как строку.

Iterator<Map.Entry<String,String>> holyDayiterator = workingdayMap.entrySet().iterator(); 

       while (holyDayiterator.hasNext()) { 
        Map.Entry holiDayEntry = holyDayiterator.next(); 
        if(!employeeMap.containsValue((holiDayEntry.getValue()))){ 
         System.out.println("works perfect"); 
        } 

Спасибо, ребята, за вашу поддержку и людей, которые также дали голос.

:) Tony

+0

Великий Тони, у тебя это есть. – SAR

2

ли значения даты объекты? Если это так, вы пытаетесь увидеть, содержит ли карта один и тот же объект (ну его хеш, который будет отличаться, если вы не сохраните ТОЧНЫЙ тот же экземпляр на обеих картах), а не значение объекта.

2

Что-то, как это должно работать:

Set workingValues = new HashSet(workingdayMap.values()); 
workingValues.removeAll(employeeMap.values()); 

Мы получаем все значения выхода из workingdayMap с использованием метода values(). Мы не хотим изменять это Collection непосредственно, так как это изменит workingdayMap, поэтому мы создадим Set наших значений под названием workingValues.

Мы тогда удалить все найденные значения в employeeMap, которые подарят значения, которые находятся в workingdayMap, но не в employeeMap в workingValues.

2

Не могли бы вы попробуйте вот так.

HashMap<String, Date> employeeMap = new HashMap<String, Date>(); 

    HashMap<String, Date> workingdaymap = new HashMap<String, Date>(); 

    Set<String> values1 = new HashSet<String>(employeeMap.values()); 
    Set<String> values2 = new HashSet<String>(workingdaymap.values()); 
    boolean equal = values1.equals(value2); 
Смежные вопросы