diff --git a/src/main/java/data/MultipleHMKeys.java b/src/main/java/data/MultipleHMKeys.java index 40d3351..026df1a 100755 --- a/src/main/java/data/MultipleHMKeys.java +++ b/src/main/java/data/MultipleHMKeys.java @@ -1,6 +1,7 @@ package data; import java.util.ArrayList; +import java.util.Comparator; import java.util.Objects; /* @@ -56,4 +57,13 @@ public interface MultipleHMKeys { @Override boolean equals(Object obj); + + default int compareTo(MultipleHMKeys othr){ + return Comparator.comparing(MultipleHMKeys::getK1) + .thenComparing(MultipleHMKeys::getK2) + .thenComparing(MultipleHMKeys::getK3) + .thenComparing(MultipleHMKeys::getK4) + .thenComparing(MultipleHMKeys::getK5) + .compare(this, othr); + } } diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java index d44671e..857051f 100755 --- a/src/main/java/util/Util.java +++ b/src/main/java/util/Util.java @@ -96,6 +96,24 @@ public class Util { return m; } + public class ValueThenKeyComparator, + V extends Comparable> + implements Comparator> { + + public int compare(Map.Entry a, Map.Entry b) { + int cmp1 = a.getValue().compareTo(b.getValue()); + if (cmp1 != 0) { + return cmp1; + } else { + return a.getKey().compareTo(b.getKey()); + } + } + + } + + + + /** * Sorts a map in a descending order by value. */ @@ -122,12 +140,17 @@ public class Util { limit = map.size(); } - Map result = new LinkedHashMap<>(); TimeWatch watch = TimeWatch.start(); - Stream> st = map.entrySet().stream(); + // sort by alphabet + Map alphaSorted = new LinkedHashMap<>(); + map.entrySet().stream().sorted((a, b) -> ((MultipleHMKeys)a.getKey()).compareTo((MultipleHMKeys)b.getKey())).limit(limit) + .forEachOrdered(e -> alphaSorted.put(e.getKey(), e.getValue())); - st.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).limit(limit) + + + Map result = new LinkedHashMap<>(); + alphaSorted.entrySet().stream().sorted((a, b) -> (int) ((Long) b.getValue() - (Long) a.getValue())).limit(limit) .forEachOrdered(e -> result.put(e.getKey(), e.getValue())); if (Settings.PRINT_LOG) {