From cadaee22c3bc7eab1431cb46c61aa7b0a7738be0 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 16 Jan 2019 16:17:12 +0100 Subject: [PATCH] list comparator implemeted --- .../common/comparator/ListComparator.java | 50 +++++++++++++++ .../common/comparator/AllComparatorTests.java | 1 + .../common/comparator/ListComparatorTest.java | 64 +++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 commons/src/main/java/lcsb/mapviewer/common/comparator/ListComparator.java create mode 100644 commons/src/test/java/lcsb/mapviewer/common/comparator/ListComparatorTest.java diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/ListComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/ListComparator.java new file mode 100644 index 0000000000..1d7334ca26 --- /dev/null +++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/ListComparator.java @@ -0,0 +1,50 @@ +package lcsb.mapviewer.common.comparator; + +import java.util.Comparator; +import java.util.List; + +import org.apache.log4j.Logger; + +/** + * Comparator used for comparing lists of objects. + * + * @author Piotr Gawron + * + */ +public class ListComparator<T> implements Comparator<List<T>> { + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private Logger logger = Logger.getLogger(ListComparator.class); + + private Comparator<T> objectComparator; + + public ListComparator(Comparator<T> objectComparator) { + this.objectComparator = objectComparator; + } + + @Override + public int compare(List<T> arg0, List<T> arg1) { + if (arg0 == null) { + if (arg1 == null) { + return 0; + } else { + return 1; + } + } else if (arg1 == null) { + return -1; + } + + if (arg0.size() != arg1.size()) { + return new IntegerComparator().compare(arg0.size(), arg1.size()); + } + for (int i = 0; i < arg0.size(); i++) { + if (objectComparator.compare(arg0.get(i), arg1.get(i)) != 0) { + return objectComparator.compare(arg0.get(i), arg1.get(i)); + } + } + return 0; + } + +} diff --git a/commons/src/test/java/lcsb/mapviewer/common/comparator/AllComparatorTests.java b/commons/src/test/java/lcsb/mapviewer/common/comparator/AllComparatorTests.java index 16d18b9814..7dbfdf2a60 100644 --- a/commons/src/test/java/lcsb/mapviewer/common/comparator/AllComparatorTests.java +++ b/commons/src/test/java/lcsb/mapviewer/common/comparator/AllComparatorTests.java @@ -10,6 +10,7 @@ import org.junit.runners.Suite.SuiteClasses; DoubleComparatorTest.class, EnumComparatorTest.class, IntegerComparatorTest.class, + ListComparatorTest.class, PointComparatorTest.class, StringComparatorTest.class, StringListComparatorTest.class, diff --git a/commons/src/test/java/lcsb/mapviewer/common/comparator/ListComparatorTest.java b/commons/src/test/java/lcsb/mapviewer/common/comparator/ListComparatorTest.java new file mode 100644 index 0000000000..b7e6912654 --- /dev/null +++ b/commons/src/test/java/lcsb/mapviewer/common/comparator/ListComparatorTest.java @@ -0,0 +1,64 @@ +package lcsb.mapviewer.common.comparator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +import org.junit.Test; + +public class ListComparatorTest { + + @Test + public void testEqual() { + List<Color> set1 = new ArrayList<>(); + List<Color> set2 = new ArrayList<>(); + set1.add(Color.BLACK); + set2.add(Color.BLACK); + ListComparator<Color> comparator = new ListComparator<>(new ColorComparator()); + assertEquals(0, comparator.compare(set1, set2)); + } + + @Test + public void testDifferent() { + List<Color> set1 = new ArrayList<>(); + List<Color> set2 = new ArrayList<>(); + set1.add(Color.BLACK); + set2.add(Color.BLUE); + ListComparator<Color> comparator = new ListComparator<>(new ColorComparator()); + assertTrue(comparator.compare(set1, set2) != 0); + } + + @Test + public void testEqualWithCustomClass() { + class Data { + int x; + + Data(int x) { + this.x = x; + } + } + class DataComparator implements Comparator<Data> { + @Override + public int compare(Data o1, Data o2) { + return o1.x - o2.x; + } + } + + List<Data> set1 = new ArrayList<>(); + List<Data> set2 = new ArrayList<>(); + set1.add(new Data(1)); + set2.add(new Data(1)); + + ListComparator<Data> comparator = new ListComparator<>(new DataComparator()); + assertEquals(0, comparator.compare(set1, set2)); + + set2.add(new Data(2)); + assertTrue(0 != comparator.compare(set1, set2)); + assertTrue(0 != comparator.compare(set2, set1)); + } + +} -- GitLab