У меня есть программа, которая берет слово и словарь текстового файла и ищет в словаре комбинации слов, которые равны (анаграммы) заданному слову.
В итоге я получаю Arraylist массивов String, каждый массив представляет собой решение, содержащее используемые им слова, а Arraylist — это все решения.
Затем я перебираю массив и сортирую массивы как:
List<String> list = Arrays.asList(array);
list.sort(Comparator.comparing(String::length).reversed().thenComparing(String::compareTo));
который сначала сортируется по длине слова (по убыванию), а затем использует алфавитный порядок для разрешения конфликтов для слов одинаковой длины.
Теперь у меня отсортированы отдельные массивы, но я пытаюсь отсортировать их в массиве по определенным правилам:
- по возрастанию количества слов
- для массивов, содержащих одинаковое количество слов, и все слова имеют одинаковую длину, массивы сортируются в алфавитном порядке.
- одинаковое количество слов, но разной длины: сначала самая длинная неравная длина. Например, если длина a[0] == длина b[0], но длина b[1]>длина a[1], то b идет первым.
Они уже хранятся по возрастанию количества слов, так как сначала находятся однословные решения, затем 2 слова и так далее, которые добавляются к массиву.
Теперь, когда массивы находятся в порядке убывания длины слова после сортировки, я думаю, что для достижения вышеуказанного должен быть простой компаратор, но я изо всех сил пытаюсь это сделать.