public static <T extends Comparable<? super T>> int compareLists( List<? extends T> list1, List<? extends T> list2 ) { Comparator<T> comparator = new Comparator<T>() { @Override public int compare(T o1, T o2) { return o1.compareTo(o2); } }; return compareLists(list1, list2, comparator); }
@Override public int compareTo(Datum o) { if (o instanceof ListDatum) { ListDatum otherListDatum = (ListDatum) o; return Lists.compareLists(datumList, otherListDatum.datumList); } else { throw new IllegalArgumentException( String.format( "ListDatum cannot compare to %s", o.getClass() ) ); } }
@Override public int compareTo(Datum o) { if (!(o instanceof MapDatum)) { throw new IllegalArgumentException("need MapDatum"); } @SuppressWarnings({"unchecked"}) MapDatum otherMapDatum = (MapDatum) o; // this is only used in InMemoryStorage for unit tests, so it can e // inefficient; this is terribly inefficient, but it provides // some way to comapre maps :) List<Map.Entry<Datum, Datum>> entryList1 = new ArrayList<>(map.entrySet()); List<Map.Entry<Datum, Datum>> entryList2 = new ArrayList<>(otherMapDatum.map.entrySet()); Collections.sort(entryList1, ENTRY_COMPARATOR); Collections.sort(entryList2, ENTRY_COMPARATOR); return Lists.compareLists(entryList1, entryList2, ENTRY_COMPARATOR); }
@Test(groups = "fast") public void testSanity() throws Exception { Assert.assertEquals(Lists.compareLists(list1, list1), 0); Assert.assertEquals(Lists.compareLists(list1, list2), -1); Assert.assertEquals(Lists.compareLists(list1, list3), -1); Assert.assertEquals(Lists.compareLists(list2, list1), 1); Assert.assertEquals(Lists.compareLists(list2, list2), 0); Assert.assertEquals(Lists.compareLists(list2, list3), 1); Assert.assertEquals(Lists.compareLists(list3, list1), 1); Assert.assertEquals(Lists.compareLists(list3, list2), -1); Assert.assertEquals(Lists.compareLists(list3, list3), 0); } }
@Test(groups = "fast") public void testSanity() throws Exception { Assert.assertEquals(Lists.compareLists(list1, list1), 0); Assert.assertEquals(Lists.compareLists(list1, list2), -1); Assert.assertEquals(Lists.compareLists(list1, list3), -1); Assert.assertEquals(Lists.compareLists(list2, list1), 1); Assert.assertEquals(Lists.compareLists(list2, list2), 0); Assert.assertEquals(Lists.compareLists(list2, list3), 1); Assert.assertEquals(Lists.compareLists(list3, list1), 1); Assert.assertEquals(Lists.compareLists(list3, list2), -1); Assert.assertEquals(Lists.compareLists(list3, list3), 0); } }