import java.util.* ;
import java.lang.* ;
class Main
{
oldMap.put ( "initials" ,"Y. J." ) ;
oldMap.put ( "firstName" ,"Yogend" ) ;
oldMap.put ( "lastName" ,"Jos" ) ;
oldMap.put ( "userName" ,"YNJos" ) ;
oldMap.put ( "age" ,"33" ) ;
newMap.put ( "initials" ,"Y. J." ) ;
newMap.put ( "firstName" ,"Yogendra" ) ;
newMap.put ( "lastName" ,"Joshi" ) ;
newMap.put ( "userName" ,"YNJoshi" ) ;
newMap.put ( "age" ,"33" ) ;
Map
< String ,Boolean
> diffMap
= Main.
scanForDifferences ( oldMap, newMap
) ;
Iterator
< Map .
Entry < String , Boolean
>> it
= diffMap.
entrySet ( ) .
iterator ( ) ; while ( it.hasNext ( ) ) {
System .
out .
println ( "Field [" + entry.
getKey ( ) + "] is " + ( entry.
getValue ( ) ? "NOT " : "" ) + "different" ) ; }
}
private static Map
< String ,Boolean
> scanForDifferences
( Map
< String ,Object
> mapOne, Map
< String ,Object
> mapTwo
) {
Iterator
< Map .
Entry < String , Object
>> it
= mapOne.
entrySet ( ) .
iterator ( ) ; while ( it.hasNext ( ) ) {
if ( mapTwo.get ( entry.getKey ( ) ) .equals ( entry.getValue ( ) ) )
else
it.remove ( ) ; // prevent ConcurrentModificationException
}
return retMap;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CiAKY2xhc3MgTWFpbgp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoKICAgICAgICBNYXA8U3RyaW5nLE9iamVjdD4gb2xkTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKTsKICAgICAgICBNYXA8U3RyaW5nLE9iamVjdD4gbmV3TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKTsKICAgICAgICAKICAgICAgICBvbGRNYXAucHV0KCJpbml0aWFscyIsIlkuIEouIik7CiAgICAgICAgb2xkTWFwLnB1dCgiZmlyc3ROYW1lIiwiWW9nZW5kIik7CiAgICAgICAgb2xkTWFwLnB1dCgibGFzdE5hbWUiLCJKb3MiKTsKICAgICAgICBvbGRNYXAucHV0KCJ1c2VyTmFtZSIsIllOSm9zIik7CiAgICAgICAgb2xkTWFwLnB1dCgiYWdlIiwiMzMiKTsKIAogICAgICAgIG5ld01hcC5wdXQoImluaXRpYWxzIiwiWS4gSi4iKTsKICAgICAgICBuZXdNYXAucHV0KCJmaXJzdE5hbWUiLCJZb2dlbmRyYSIpOwogICAgICAgIG5ld01hcC5wdXQoImxhc3ROYW1lIiwiSm9zaGkiKTsKICAgICAgICBuZXdNYXAucHV0KCJ1c2VyTmFtZSIsIllOSm9zaGkiKTsgICAgICAgIAogICAgICAgIG5ld01hcC5wdXQoImFnZSIsIjMzIik7CiAgICAgICAgCiAgICAgICAgTWFwPFN0cmluZyxCb29sZWFuPiBkaWZmTWFwID0gTWFpbi5zY2FuRm9yRGlmZmVyZW5jZXMob2xkTWFwLCBuZXdNYXApOwogICAgICAgIAogICAgICAgIEl0ZXJhdG9yPE1hcC5FbnRyeTxTdHJpbmcsIEJvb2xlYW4+PiBpdCA9IGRpZmZNYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgTWFwLkVudHJ5PFN0cmluZyxCb29sZWFuPiBlbnRyeSA9IChNYXAuRW50cnk8U3RyaW5nLEJvb2xlYW4+KWl0Lm5leHQoKTsgICAgICAgICAgICAKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaWVsZCBbIiArIGVudHJ5LmdldEtleSgpICsiXSBpcyAiICsoZW50cnkuZ2V0VmFsdWUoKT8iTk9UICI6IiIpICsgImRpZmZlcmVudCIgKTsKICAgICAgICB9ICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgfQogICAgCiAgICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLEJvb2xlYW4+IHNjYW5Gb3JEaWZmZXJlbmNlcyhNYXA8U3RyaW5nLE9iamVjdD4gbWFwT25lLCBNYXA8U3RyaW5nLE9iamVjdD4gbWFwVHdvKXsKICAgICAgICBNYXA8U3RyaW5nLEJvb2xlYW4+IHJldE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxCb29sZWFuPigpOwogICAgICAgIAogICAgICAgIEl0ZXJhdG9yPE1hcC5FbnRyeTxTdHJpbmcsIE9iamVjdD4+IGl0ID0gbWFwT25lLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgIE1hcC5FbnRyeTxTdHJpbmcsT2JqZWN0PiBlbnRyeSA9IChNYXAuRW50cnk8U3RyaW5nLE9iamVjdD4paXQubmV4dCgpOyAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWFwVHdvLmdldChlbnRyeS5nZXRLZXkoKSkuZXF1YWxzKGVudHJ5LmdldFZhbHVlKCkpKQogICAgICAgICAgICAgICAgcmV0TWFwLnB1dChlbnRyeS5nZXRLZXkoKSwgbmV3IEJvb2xlYW4oQm9vbGVhbi5UUlVFKSk7CiAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICByZXRNYXAucHV0KGVudHJ5LmdldEtleSgpLCBuZXcgQm9vbGVhbihCb29sZWFuLkZBTFNFKSk7CiAgICAgICAgICAgIGl0LnJlbW92ZSgpOyAvLyBwcmV2ZW50IENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldE1hcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQp9