code: @SuppressWarnings("unchecked")
    public static <T> DiffResult<T> diff(@Nonnull SheetReader<T> a, @Nonnull SheetReader<T> b,
        ReportGenerator reportGenerator) {
      Collection<T> ca = a.read();
      Collection<T> cb = b.read();
      Collection<T> disjunction = CollectionUtils.disjunction(ca, cb);
      Info<T> info = new ReportInfo<T>(new Files(a.getSheet().getFile().getAbsolutePath(), b.getSheet().getFile()
          .getAbsolutePath()), new Sheets(a.getSheet().getNativeSheet().getSheetName(), b.getSheet().getNativeSheet()
          .getSheetName()), new Collections<T>(ca, cb, disjunction));
      ReportGenerator reporter;
      if (reportGenerator != null) {
        reporter = reportGenerator;
      } else {
        reporter = new SimpleReportGenerator();
      }
      return new DiffResultImpl<T>(disjunction, reporter.generateReport(info));
    }
docs: Returns the difference between two sheets. Note that T must implement
  hashCode() and equals() if you wish to have meaningful symmetric difference
  results.
  
  @param a the first sheet
  @param b the second sheet
  @param reportGenerator a custom reporter implementation
  @return DiffResult object which holds the diff result