es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es implementar el método equals en la clase Class1 y comparar todos los campos excepto createdAt y updatedAt. Aquí hay un ejemplo de implementación:

    public final class Class1 {
      private String a;
      private String b;
      private String c;
      // ...
      private String z;
      private Date createdAt;
      private Date updatedAt;
    
      @Override
      public boolean equals(Object obj) {
        if (obj == this) {
          return true;
        }
    
        if (!(obj instanceof Class1)) {
          return false;
        }
    
        Class1 other = (Class1) obj;
        return Objects.equals(this.a, other.a)
            && Objects.equals(this.b, other.b)
            && Objects.equals(this.c, other.c)
            // ...
            && Objects.equals(this.z, other.z);
      }
    }
    

    Esta implementación compara todos los campos excepto createdAt y updatedAt utilizando el método Objects.equals, que verifica los valores nulos y compara los objetos utilizando su método equals 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 excluyendo createdAt y updatedAt.

Comments are closed.