tengo el siguiente HashMap con propiedades claves y valores:Java: comparar HashMap <String, Object> si el valor podría ser un Object []
private HashMap<String, Object> prop_values;
tengo que comprobar si una instancia de la misma es igual a otro. En el pasado, yo acabo de hacer esto:
if (prop_values_1.equals(prop_values_2)){
// do something
}
Y esto funcionó hasta que llegué Object[]
como un valor. Por lo tanto, mi expresión anterior siempre devolvió false
en tal HashMap
con cualquier valor Object[]
.
Por lo tanto, tengo que poner en práctica este método:
private boolean isPropValuesEquals(HashMap<String, Object> pv1, HashMap<String, Object> pv2){
boolean isEquals = true;
if (pv1 == null || pv2 == null){
return false;
}
if (!pv1.keySet().equals(pv2.keySet())){
return false;
}
for (String key : pv1.keySet()){
Object cur_pv1 = pv1.get(key);
Object cur_pv2 = pv2.get(key);
if (cur_pv1 instanceof Object[]){
if (cur_pv2 instanceof Object[]){
isEquals = Arrays.equals((Object[])cur_pv1, (Object[])cur_pv2);
} else {
return false;
}
} else {
isEquals = isEquals && cur_pv1.equals(cur_pv2);
}
if (!isEquals){
return false;
}
}
return isEquals;
}
Funciona, pero parece que hay algún tipo de corte, y no estoy seguro de que esta es la mejor manera de lograr lo que necesito.
lo tanto, aquí hay dos cuestiones:.
qué Object [] iguales() no es el mismo que Arrays.equals()? Parece ser doloroso
¿Existe alguna forma mejor de comparar
HashMap<String, Object>
, si los valores pueden serObject[]
?
Use una lista