2013-09-05 2 views
5

मेरे पास दो HashMap<Integer, Question> मानचित्र हैं जिन्हें मैं तुलना करना चाहता हूं। इस मामले में Question मैंने लिखा एक जवाबीन है।मैं कैसे दावा करूं कि जावबीन मूल्यों के साथ दो हैश मैप बराबर हैं?

मैं कैसे कहूं कि HashMap दोनों बराबर हैं? इस परिदृश्य में, बराबर मतलब है कि HashMap दोनों में बिल्कुल Question बीन शामिल है?

यदि यह बिल्कुल प्रासंगिक है, तो मैं जुनीट का उपयोग करके एक यूनिट परीक्षण लिख रहा हूं।

+1

आप जावा 1.7 या उच्चतर संस्करण का उपयोग कर रहे हैं, तो नीचे दिए कोड स्निपेट काम करेंगे। '' ऑब्जेक्ट्स।बराबर (अपेक्षित वर्डमैप, वास्तविक वर्डमैप) '' । । कृपया बराबर विधि के बारे में अधिक जानकारी यहां प्राप्त करें: https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html#equals-java.lang.Object-java.lang.Object - –

उत्तर

6

यहां समाधान है जो अंत में समाप्त हो गया है जिसका उपयोग इकाई परीक्षण उद्देश्यों के लिए पूरी तरह से किया गया है।

for(Map.Entry<Integer, Question> entry : questionMap.entrySet()) { 
    assertReflectionEquals(entry.getValue(), expectedQuestionMap.get(entry.getKey()), ReflectionComparatorMode.LENIENT_ORDER); 
} 

यह unitils पैकेज से assertReflectionEquals() लागू करना शामिल है।

<dependency> 
    <groupId>org.unitils</groupId> 
    <artifactId>unitils-core</artifactId> 
    <version>3.3</version> 
    <scope>test</scope> 
</dependency> 
0

अपने प्रश्न वर्ग equals लागू करता है, तो आप सिर्फ कर सकते हैं

assertEquals(expectedMap, hashMap); 

assertTrue(expectedMap.equals(hashMap)); 

मानचित्र इंटरफ़ेस यह बताता है कि दो मैप्स बराबर अगर वे बराबर चाबी के लिए बराबर तत्व होते हैं।

0

अपने सेम वर्ग एक क्षेत्र है जिसके लिए हर आप तो बनाने ऑब्जेक्ट पर आप उस क्षेत्र के साथ उर सेम कक्षा में बराबरी और hashCode विधि ओवरराइड करना चाहिए

2

भी, नक्शे की तुलना अपने विशेष मामले में अनूठा होगा है यदि:

1) नक्शे के आकार की जाँच करें अगर इसके बराबर

फिर

`assertTrue(expectedMap.equals(hashMap));` 

का उपयोग अपने प्रश्न सेम में आप ओवरराइड करने के लिए है बराबर और हैशकोड विधि।

1

यहाँ कैसे HashMap बराबर विधि काम करता है:

public boolean equals(Object o) { 
.......... 
.......... 
Map<K,V> m = (Map<K,V>) o; 
.......... 
    Iterator<Entry<K,V>> i = entrySet().iterator(); 
    while (i.hasNext()) { 
    Entry<K,V> e = i.next(); 
      K key = e.getKey(); 
      V value = e.getValue(); 
      if (value == null) { 
       if (!(m.get(key)==null && m.containsKey(key))) 
        return false; 
      } else { 
       if (!value.equals(m.get(key))) 
        return false; 
      } 
........... 
........... 
return true; 
} 

अब के बाद से, इसका मतलब है कि किसी कुंजी के लिए मूल्य वस्तुओं एक ही होना चाहिए मूल्य की वस्तुओं की बराबरी विधि, (के रूप में द्वारा नियंत्रित विधि के बराबर होती है) लागू किया जाता है ।

ऊपर आपको यह समझने में मदद मिलेगी कि आपके जुनीट किस मामले में गुजरेंगे। अपने JUnit विधि में आप का उपयोग कर सकते हैं:

public static void assertEquals(java.lang.Object expected, 
           java.lang.Object actual) 

अधिक जानकारी के लिए link देखें।

चीयर्स !!

0

आप उपयोग कर सकते हैं compare(-,-) आपकी आवश्यकता के रूप में वस्तुओं के बीच कस्टम तुलना लागू करने के लिए Comparator इंटरफ़ेस की (अधिकतर sorting उद्देश्य के लिए इस्तेमाल)। या वस्तुओं की तुलना करने के लिए equals() विधि का उपयोग करें।

5

अमरूद का उपयोग करके आप कर सकते हैं:

assertTrue(Maps.difference(expected, actual).areEqual()); 
संबंधित मुद्दे