StartsWithComparator.java
package no.nav.data.common.utils;
import org.apache.commons.lang3.Strings;
import java.util.Comparator;
import static java.lang.String.CASE_INSENSITIVE_ORDER;
/**
* String comparator that first sorts strings that start with a given prefix, then alphabetically
*/
public class StartsWithComparator implements Comparator<String> {
private final String prefix;
public static Comparator<String> startsWith(String prefix) {
return new StartsWithComparator(prefix).thenComparing(CASE_INSENSITIVE_ORDER);
}
private StartsWithComparator(String prefix) {
this.prefix = prefix;
}
@Override
public int compare(String o1, String o2) {
return start(o1) - start(o2);
}
private int start(String string) {
int start = Strings.CI.indexOf(string, prefix);
return start < 0 ? Integer.MAX_VALUE : start;
}
}