@Test public void testCollectionComparator() { List<Comparator> comparators = new ArrayList<Comparator>(); comparators.add(new SimpleComparator()); comparators.add(new CollectionComparator()); comparators.add(new ObjectComparator()); IntegratedComparator comparator = new IntegratedComparator(comparators); List<String> left = new ArrayList<String>(); left.add("a"); left.add("b"); left.add("c"); left.add("d"); left.add("e"); left.add("f"); left.add("g"); List<String> right = new ArrayList<String>(); right.add("A"); right.add("b"); right.add("c"); right.add("D"); right.add("e"); right.add("f"); right.add("G"); CompareResult result = comparator.compare(left, right); Assert.assertNotEquals(result, null); Assert.assertTrue(result.hasDifference()); Assert.assertEquals(result.getDifferences().size(), 3); List<Student> leftStudents = new ArrayList<Student>(); leftStudents.add(Student.builder() .name("java") .school("w3c") .age(10) .build()); List<Student> rightStudents = new ArrayList<Student>(); rightStudents.add(Student.builder() .name("java") .school("w3c") .age(12) .build()); rightStudents.add(Student.builder() .name("java") .school("w3c") .age(12) .build()); result = comparator.compare(leftStudents, rightStudents); Assert.assertNotEquals(result, null); Assert.assertTrue(result.hasDifference()); Assert.assertEquals(result.getDifferences().size(), 2); }
@Override public CompareResult compare(Object left, Object right) { tryClear(); List<Path> paths = new ArrayList<Path>(0); try { dispatch(left, right, paths); } catch (Exception e) { addDifference(left, right, Difference.Type.COMPARE_ERR, paths); } return new CompareResult(left, right, differences); }
IntegratedComparator implements Comparable { @Override public CompareResult compare(Object left, Object right) { tryClear(); List<Path> paths = new ArrayList<Path>(0); try { dispatch(left, right, paths); } catch (Exception e) { addDifference(left, right, Difference.Type.COMPARE_ERR, paths); } return new CompareResult(left, right, differences); } }
IntegratedComparator implements Comparable { @Override public CompareResult compare(Object left, Object right) { tryClear(); List<Path> paths = new ArrayList<Path>(0); try { dispatch(left, right, paths); } catch (Exception e) { addDifference(left, right, Difference.Type.COMPARE_ERR, paths); } return new CompareResult(left, right, differences); } IntegratedComparator(List<Comparator> comparators); }
IntegratedComparator implements Comparable { @Override public CompareResult compare(Object left, Object right) { tryClear(); List<Path> paths = new ArrayList<Path>(0); try { dispatch(left, right, paths); } catch (Exception e) { addDifference(left, right, Difference.Type.COMPARE_ERR, paths); } return new CompareResult(left, right, differences); } IntegratedComparator(List<Comparator> comparators); void dispatch(Object left, Object right, List<Path> paths); @Override CompareResult compare(Object left, Object right); void addDifference(Object left, Object right, Difference.Type type, List<Path> paths); List<Path> declarePath(List<Path> paths, int index); List<Path> declarePath(List<Path> paths, String key); }
IntegratedComparator implements Comparable { @Override public CompareResult compare(Object left, Object right) { tryClear(); List<Path> paths = new ArrayList<Path>(0); try { dispatch(left, right, paths); } catch (Exception e) { addDifference(left, right, Difference.Type.COMPARE_ERR, paths); } return new CompareResult(left, right, differences); } IntegratedComparator(List<Comparator> comparators); void dispatch(Object left, Object right, List<Path> paths); @Override CompareResult compare(Object left, Object right); void addDifference(Object left, Object right, Difference.Type type, List<Path> paths); List<Path> declarePath(List<Path> paths, int index); List<Path> declarePath(List<Path> paths, String key);  }