package net.abhinavsarkar.algorist; public interface Sorter { T[] sort(T[] input, Comparator comparator); default T select(T[] input, int rank, Comparator comparator) { if (rank < 1) { throw new IllegalArgumentException("rank is less than one"); } if (rank > input.length) { throw new IllegalArgumentException("rank is larger than input length"); } T[] sorted = sort(input, comparator); return sorted[rank - 1]; } default T[] top(T[] input, int rank, Comparator comparator) { if (rank < 1) { throw new IllegalArgumentException("rank is less than one"); } if (rank > input.length) { throw new IllegalArgumentException("rank is larger than input length"); } return sort(input, comparator); } @FunctionalInterface interface Comparator { int compare(T o1, T o2); } }