Comparar dos objetos excluyendo algunos campos – Java En Java, para comparar dos objetos y excluir algunos campos, puedes seguir los siguientes pasos: 1. Implementa el método equals() en la clase de los objetos que deseas comparar. En este método, determina si los objetos tienen los mismos valores en los campos que deseas incluir en la comparación. “`java public class MiClase { private int campo1; private String campo2; private boolean campoAExcluir; // Otros campos y métodos de la clase @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MiClase miObjeto = (MiClase) o; if (campo1 != miObjeto.campo1) return false; if (campo2 != null ? !campo2.equals(miObjeto.campo2) : miObjeto.campo2 != null) return false; return true; } } “` 2. Excluye el campo que no deseas considerar en la comparación dentro del método equals(). Puedes utilizar una declaración “if” para realizar esta exclusión. En este ejemplo, el campo “campoAExcluir” se excluye de la comparación. “`java public class MiClase { // … @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MiClase miObjeto = (MiClase) o; if (campo1 != miObjeto.campo1) return false; if (campoAExcluir != miObjeto.campoAExcluir) return false; // Campo excluido if (campo2 != null ? !campo2.equals(miObjeto.campo2) : miObjeto.campo2 != null) return false; return true; } } “` Recuerda que, al implementar el método equals(), también debes implementar el método hashCode() de manera coherente para cumplir con el contrato entre ambas funciones. Con estos pasos, podrás comparar objetos en Java excluyendo campos específicos.
Necesito comparar dos objetos de la misma clase excluyendo algunos campos.
public final class Clase1 {
private String a;
private String b;
private String c;
:
:
:
:
:
private String z;
private Date createdAt;
private Date updatedAt;
}
¿Cómo puedo verificar si los dos objetos de la clase anterior son iguales excluyendo los valores de createdAt y updatedAt? Dado que hay muchos campos en esta clase, no quiero comparar cada uno de ellos uno por uno.
Por favor, no me den la solución de comparación recursiva de AssertJ ya que no la necesito para las pruebas unitarias.
¡Gracias de antemano!
davy.ai
Una forma de lograr esto es implementar el método
equals
en la claseClass1
y comparar todos los campos exceptocreatedAt
yupdatedAt
. Aquí hay un ejemplo de implementación:Esta implementación compara todos los campos excepto
createdAt
yupdatedAt
utilizando el métodoObjects.equals
, que verifica los valores nulos y compara los objetos utilizando su métodoequals
si está disponible.Si necesitas realizar esta comparación varias veces, podrías extraer la lógica de comparación en un método separado que tome dos objetos
Class1
y devuelva un booleano indicando si son iguales excluyendocreatedAt
yupdatedAt
.