Поскольку вы не используете естественное упорядочение строк, вам придется реализовать собственный компаратор. Вот официальная документация Comparator
. Согласно документации, интерфейс Comparator:
Функция сравнения, которая накладывает полное упорядочение на некоторую коллекцию объектов.
И его функция сравнения вернет:
отрицательное целое число, ноль или положительное целое число, поскольку первый аргумент меньше, равен или больше, чем секунда.
Вы можете использовать метод from()
класса Ordered
. Этот метод принимает в качестве параметра пользовательский компаратор, который выполняет задачу сравнения строк:
public boolean isOrdered(List<String> list) {
return Ordering.from(getComparator()).isOrdered(list);
}
Функция getComparator()
вернет Comparator
:
public Comparator<String> getComparator() {
return new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
char firstChar1 = o1.charAt(0);
char firstChar2 = o2.charAt(0);
if (o1.startsWith(" ")) {
return o2.startsWith(" ") ? 0 : -1;
} else if (o2.startsWith(" ")) {
return o2.startsWith(" ") ? 0 : 1;
} else if (firstChar1 == firstChar2) {
return 0;
} else {
return firstChar1 - firstChar2 < 0 ? -1 : 1;
}
}
};
}
У меня есть проверенный выше код:
public void myMethod() {
List<String> ordered = Arrays.asList(" hello", "1hello", "2hello", "8hello", "hello", "zhello");
List<String> unordered = Arrays.asList(" hello", "1hello", "8hello", "2hello", "hello", "zhello");
System.out.println(isOrdered(ordered));
System.out.println(isOrdered(unordered));
}
Вывод на консоль:
true
false