Использование Collator с украинским языком - PullRequest
0 голосов
/ 15 октября 2018

Пожалуйста, посмотрите на мой метод, в котором я пытаюсь реализовать Collator для сортировки объектов с полем "title".Метод:

public List<SchoolSubject> findAllByOrderByTitle() {
    List<SchoolSubject> schoolSubjects = subjectRepository.findAllByOrderByTitle();

    Collator uaCollator = Collator.getInstance(new Locale("ua", "UA"));
    uaCollator.setStrength(Collator.SECONDARY);
    schoolSubjects.stream().sorted((s1, s2)->uaCollator.compare(s1.getTitle(), s2.getTitle()));
    return schoolSubjects;
}

Сортирует, но не правильно.Буква "я" ставится в самом начале.Что с ним не так?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Правильный код:

public List<SchoolSubject> findAllByOrderByTitle() {
    List<SchoolSubject> schoolSubjects = subjectRepository.findAllByOrderByTitle();

    Collator uaCollator = Collator.getInstance(new Locale("uk", "UA"));
    uaCollator.setStrength(Collator.PRIMARY);
    schoolSubjects.sort((s1, s2)->uaCollator.compare(s1.getTitle(), s2.getTitle()));
    return schoolSubjects;
}

Исправлено с новым языковым стандартом ("uk", "UA"), исключен поток () из лямбды, и он правильно отсортирован.

0 голосов
/ 15 октября 2018

Я думаю, что вы должны использовать new Locale("uk", "UA")

Проверьте этот сайт о Интернационализация

РЕДАКТИРОВАТЬ:

IЯ думаю, что проблема в том, как представлен украинский алфавит.

https://en.wikipedia.org/wiki/Ukrainian_alphabet#Unicode

Согласно Википедии, «я» - последнее письмо с учетом Unicodes.Так, может быть, вы сортируете по убыванию, а не по возрастанию?

...