mardi 3 septembre 2019

How to improve a cumbersome comparison of 2 objects' fields

We have a program that compares pairs of Students by checking each field of the Student and counting the diffs:

class Student{

   String name;
   String address;
   String biologyCourse;
    .....
   // about 100 other fields
}

And the counter POJO class:

class Counters{
  long bothStudentsHaveName;
  long onlyLeftHasName;
  long onlyRightHasName;

   ......
  // number of fields in Student * 3 (both, only left, only right)
}

Our compare function accepts 2 students and the counters object and needs to scan the fields and update the relevant counters:

    public void compareStudents(Student left, Student right, Counters counters){

        if (!StringUtils.isEmpty(left.name) && !StringUtils.isEmpty(right.name) ){
            counters.bothStudentsHaveName++;
        } else if (StringUtils.isEmpty(left.name) && !StringUtils.isEmpty(right.name)){
            counters.onlyRightHasName++;
        } else if (!StringUtils.isEmpty(left.name) && StringUtils.isEmpty(right.name))){
            counters.onlyLeftHasName
        }

     /// and now??
}

At this point, we can add 100 more if/else threes like the above but we believe there should be a much easier way to do that.

Reflection can be an option or maybe X dimensions arrays, but can we somehow write the code so the comparison and counting will be much more generic?





Aucun commentaire:

Enregistrer un commentaire