package test; import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class TestQueryStatsComparator { @Test public void test() { long[] testData = { 0, 0, 0, 1444225382010l, 0, 1444225382011l, 0, 1444225382012l, 0, 1444225382056l, 0, 1444225382014l, 0, 1444225382015l, 0, 1444225382016l, 0, 0, 1444225382017l, 0, 1444225678350l, 0, 1444225680397l, 0, 1444225382018l, 1444225382019l, 1444225382020l, 0, 1444225382021l, 0, 1444225382022l, 1444225382023l }; List stats = new ArrayList<>(); for (int i = 0; i < testData.length; i++) { QueryStats qs = new QueryStats(String.valueOf(i), testData[i]); stats.add(qs); } try { Collections.sort(stats, new QueryStatsComparator()); } catch (IllegalArgumentException e) { Assert.fail(e.getMessage()); } } private static class QueryStatsComparator implements Comparator { @Override public int compare(QueryStats stats1, QueryStats stats2) { if (stats1.lastInvocation == 0) return 1; if (stats2.lastInvocation == 0) return -1; long result = stats1.lastInvocation - stats2.lastInvocation; if (result > 0) { return 1; } else if (result == 0) { return 0; } else { return -1; } } } private static class QueryStats { private final long lastInvocation; private final String query; public QueryStats(String query, long lastInvocation) { this.query = query; this.lastInvocation = lastInvocation; } @Override public int hashCode() { return query.hashCode(); } @Override public boolean equals(Object other) { if (other instanceof QueryStats) { QueryStats qs = (QueryStats) other; return qs.query.equals(this.query); } return false; } } }