Как проверить, отсортирован ли список <String>в соответствии с заданным шаблоном c в Гуаве? - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь проверить, отсортированы ли элементы List<String> по первому символу его элементов в соответствии с этим форматом (Пробел, Числа, Буквы), пробел в буквальном смысле представляет собой строку из 8 пробелов " "

Я попробовал это безрезультатно

Ordering.from(String.CASE_INSENSITIVE_ORDER).isOrdered(abc);

Я хочу сделать это с Гуавой, я успешно сделал это с тремя for петлями.

1 Ответ

1 голос
/ 30 апреля 2020

Поскольку вы не используете естественное упорядочение строк, вам придется реализовать собственный компаратор. Вот официальная документация 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
...