diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2012-12-12 20:14:23 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2012-12-12 20:14:23 +0100 |
| commit | 9a9000f770fd6a58b14cb970eabc6d4ab2f9d51b (patch) | |
| tree | 863cba3b25c89c9b8f16125a2af78bb655534385 /main/src/cgeo/geocaching/sorting | |
| parent | 8a4f62ab17c24efd90a1d9fac35af235b36ac221 (diff) | |
| download | cgeo-9a9000f770fd6a58b14cb970eabc6d4ab2f9d51b.zip cgeo-9a9000f770fd6a58b14cb970eabc6d4ab2f9d51b.tar.gz cgeo-9a9000f770fd6a58b14cb970eabc6d4ab2f9d51b.tar.bz2 | |
fix #1747: sort in reverse order
Diffstat (limited to 'main/src/cgeo/geocaching/sorting')
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/DistanceComparator.java | 18 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/InverseComparator.java | 22 |
2 files changed, 39 insertions, 1 deletions
diff --git a/main/src/cgeo/geocaching/sorting/DistanceComparator.java b/main/src/cgeo/geocaching/sorting/DistanceComparator.java index d601433..781359a 100644 --- a/main/src/cgeo/geocaching/sorting/DistanceComparator.java +++ b/main/src/cgeo/geocaching/sorting/DistanceComparator.java @@ -11,8 +11,22 @@ import java.util.List; */ public class DistanceComparator extends AbstractCacheComparator { + final private Geopoint coords; + final private List<cgCache> list; + private boolean cachedDistances; + public DistanceComparator(final Geopoint coords, List<cgCache> list) { - // calculate all distances to avoid duplicate calculations during sorting + this.coords = coords; + this.list = list; + } + + /** + * calculate all distances only once to avoid costly re-calculation of the same distance during sorting + */ + private void calculateAllDistances() { + if (cachedDistances) { + return; + } for (cgCache cache : list) { if (cache.getCoords() != null) { cache.setDistance(coords.distanceTo(cache.getCoords())); @@ -21,6 +35,7 @@ public class DistanceComparator extends AbstractCacheComparator { cache.setDistance(null); } } + cachedDistances = true; } @Override @@ -30,6 +45,7 @@ public class DistanceComparator extends AbstractCacheComparator { @Override protected int compareCaches(final cgCache cache1, final cgCache cache2) { + calculateAllDistances(); if (cache1.getCoords() == null && cache2.getCoords() == null) { return 0; } diff --git a/main/src/cgeo/geocaching/sorting/InverseComparator.java b/main/src/cgeo/geocaching/sorting/InverseComparator.java new file mode 100644 index 0000000..d2fa085 --- /dev/null +++ b/main/src/cgeo/geocaching/sorting/InverseComparator.java @@ -0,0 +1,22 @@ +package cgeo.geocaching.sorting; + +import cgeo.geocaching.cgCache; + +/** + * comparator which inverses the sort order of the given other comparator + * + */ +public class InverseComparator implements CacheComparator { + + private final CacheComparator originalComparator; + + public InverseComparator(CacheComparator comparator) { + this.originalComparator = comparator; + } + + @Override + public int compare(cgCache lhs, cgCache rhs) { + return originalComparator.compare(rhs, lhs); + } + +} |
