Первое, что вам нужно сделать, это понять правила, например, что происходит, когда:
- И левая, и правая стороны начинаются с "Боб"?
- Что происходит, когда ни левая, ни правая стороны не начинаются с "Боб"?
- Вы хотите сопоставить регистр?
- Вы заботитесь только об именах или должнывключили фамилию или вы хотите, чтобы ее можно было настраивать?
Простая реализация может выглядеть примерно так ...
public class NameComparator implements Comparator<String> {
private String name;
public NameComparator(String name) {
this.name = name;
}
@Override
public int compare(String lhs, String rhs) {
if (lhs.startsWith(name) && rhs.startsWith(name)) {
return lhs.compareTo(rhs);
} else if (lhs.startsWith(name)) {
return -1;
} else if (lhs.startsWith(name)) {
return 1;
}
return lhs.compareTo(rhs);
}
}
Теперь это соответствует регистру (так что bob
не то же самое, что Bob
) и подразделяет всех «Бобов» в своей собственной группе
Как видите, пять секунд размышлений привели к появлению множества возможных способов сортировкисписок, так что вам нужно знать о ваших опциях, какие из них вы можете настроить и какие вы хотите исправить.
Вы можете назвать этот пример, используя что-то вроде ...
Collections.sort(list, new NameComparator("Bob"));
Что будет, исходя из ваших доступных яnput, output ...
Before sort [Bob Stone, Jordan Brand, Bob Mass, Dylan Walsh, Tom Mavis, Bob Ganley]
After sort [Bob Ganley, Bob Mass, Bob Stone, Dylan Walsh, Jordan Brand, Tom Mavis]