code: @SuppressWarnings("unchecked")
      private boolean checkEquality(Object o1, Object o2, boolean isGroupOfObjects) {
          if(isGroupOfObjects) {
              /// equality for a List, in this case, means that for each list, at each element the items are == to one another.
              /// we know that the element ordering is the same because we iterated over the objects in ordinal order from the type
              /// state when we built the list in the DiffHistoryDataState
              List<Object> l1 = (List<Object>)o1;
              List<Object> l2 = (List<Object>)o2;
  
              if(l1.size() != l2.size())
                  return false;
  
              for(int i=0;i<l1.size();i++) {
                  if(l1.get(i) != l2.get(i))
                      return false;
              }
  
              return true;
          } else {
              return o1 == o2;
          }
      }
docs: Equality is different depending on whether or not we are keying by a unique key.<p/>
  
  <ul>
  <li>If the key is unique, then we simply compare equality with ==.</li>
  <li>If the key is not unique, then we have grouped these elements by the key (in Lists).
  In this case, we check equality of each element with ==.</li>
  </ul>